考虑这个简单的UserControl
MyUserControl1 .xaml:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Test.CustomControls.MyUserControl1"
x:Name="control" Width="250" Height="100">
<Grid x:Name="MyGrid" x:FieldModifier="public">
<TextBlock x:Name="MyTextBox" x:FieldModifier="public" Text="Hello from the other side !!" FontWeight="Light" Foreground="red"/>
</Grid>
</UserControl>
它的孩子 MyUserControl2.xaml 基本上只是从它衍生而来,没什么新东西:
<local:MyUserControl1
x:Class="Test.CustomControls.MyUserControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Test.CustomControls">
</local:MyUserControl1>
现在让我们在某个地方使用孩子:
CustomControls.MyUserControl2 control = new CustomControls.MyUserControl2();
MyGrid.Children.Add(control);
control.MyTextBox.Text = "Some text";//NullReferenceException here
我得到NullReferenceException
这基本上告诉我MyTextBox
为空!这有什么不对?
P.S。
MyUserControl1.xaml
和MyUserControl2
都有他们的代码隐藏 .cs 文件,他们只调用InitializeComponent()
,没有别的。答案 0 :(得分:1)
通过咨询我的团队,简短的回答
看起来您希望使用XAML进行可视继承,并在要使用的基本XAML文件中包含UI。对于XAML,这不是像Winforms
那样支持的收件箱。以下是有关它的更多信息以及限制:UserControl inheritance #100。
如果您在没有任何XAML的情况下创建用户控件完成代码,则子类应该可以正常工作。