UserControl可以内部吗?

时间:2009-11-04 22:35:44

标签: silverlight xaml silverlight-3.0

我有一个定义UserControl X的程序集。在该程序集中,X由子控件Y和Z组成。我希望Y和Z标记为内部,以便只有X可用于我的程序集的用户。 / p>

我尝试通过更改XAML和代码隐藏类中的默认公共可访问性来实现此目的,编写:

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

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

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

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

在我编译和编辑时,我也有时(但并非总是)在XAML编辑器中看到这一行被标记为错误,并且有关X未知的消息。

将可访问性更改回“公共”会立即解决问题。

所以看来我的内部子控件不能通过将它们标记为内部而从外部隐藏,因为这也将它们隐藏在XAML机制的某些部分中。它是否正确?有没有办法解决它并隐藏我实际上不想分享的部分?

1 个答案:

答案 0 :(得分:3)

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