代码之家  ›  专栏  ›  技术社区  ›  Eric

用户控件可以是内部的吗?

  •  0
  • Eric  · 技术社区  · 15 年前

    我有一个定义用户控件X的程序集。在该程序集中,X由子控件Y和Z组成。我希望Y和Z标记为内部,这样我的程序集的用户只能使用X。

    我尝试通过更改xaml和codebehind类中的默认公共可访问性来实现这一点,并编写:

    <UserControl 
        x:Class="MyNameSpace.Y"
        x:ClassModifier="internal"
        ...
    

    namespace MyNameSpace
    {
        internal partial class Y : UserControl
        {
        ...
    

    当我这样做时,一切都会编译得很好,但是在运行时初始化顶级用户控件x时,我会得到可怕的错误。 AG_E_PARSER_BAD_TYPE 在x.xaml中我说

    <my:X Name="TheX"></my:X>
    

    当我编译和编辑的时候,我也 有时 (但并非总是如此)请在XAML编辑器中查看标记为错误的此行,并显示一条关于x的消息。

    将可访问性更改回“public”将立即解决该问题。

    因此,通过将内部子控件标记为内部,似乎无法从外部隐藏它们,因为这也将它们从XAML机制的某些部分隐藏。这是正确的吗?有什么办法可以解决这个问题,把我不想分享的东西藏起来吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Bryant    15 年前

    是的,您需要可以访问您的控件才能使用它们。如果不希望它们可以共享,可以做的一件事是检查父类型以确保它是您已经编码的父类型。然后,如果有人将您的控件粘贴到其应用程序中,而不将其放入主机控件中,则可以抛出异常。

    推荐文章