public object 来自 parent class 在 child class xaml 中为空
public object from parent class is null in child class xaml
考虑这个简单的 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>
它是 child 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>
现在让我们在某处使用 child:
CustomControls.MyUserControl2 control = new CustomControls.MyUserControl2();
MyGrid.Children.Add(control);
control.MyTextBox.Text = "Some text";//NullReferenceException here
并且我得到 NullReferenceException
这基本上告诉我 MyTextBox
是空的!这里有什么问题?
P.S.
- 我给了足够的时间来解决这个问题,我得出结论,当我从另一个视图派生一个 xaml 视图并尝试访问内部 public objects 时,就会出现这个问题。
MyUserControl1.xaml
和 MyUserControl2
都有它们的 code-behind .cs 文件,它们只调用 InitializeComponent()
,没有别的.
通过咨询我的团队,简短的回答是不支持。
看起来您想要使用 XAML 进行视觉继承,并在要使用的基础 XAML 文件中包含 UI。对于 XAML,这不像 Winforms
那样支持收件箱。以下是关于它的更多信息以及限制:UserControl inheritance #100。
如果您在没有任何 XAML 的情况下创建用户控件完成代码,子类应该可以正常工作。
考虑这个简单的 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>
它是 child 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>
现在让我们在某处使用 child:
CustomControls.MyUserControl2 control = new CustomControls.MyUserControl2();
MyGrid.Children.Add(control);
control.MyTextBox.Text = "Some text";//NullReferenceException here
并且我得到 NullReferenceException
这基本上告诉我 MyTextBox
是空的!这里有什么问题?
P.S.
- 我给了足够的时间来解决这个问题,我得出结论,当我从另一个视图派生一个 xaml 视图并尝试访问内部 public objects 时,就会出现这个问题。
MyUserControl1.xaml
和MyUserControl2
都有它们的 code-behind .cs 文件,它们只调用InitializeComponent()
,没有别的.
通过咨询我的团队,简短的回答是不支持。
看起来您想要使用 XAML 进行视觉继承,并在要使用的基础 XAML 文件中包含 UI。对于 XAML,这不像 Winforms
那样支持收件箱。以下是关于它的更多信息以及限制:UserControl inheritance #100。
如果您在没有任何 XAML 的情况下创建用户控件完成代码,子类应该可以正常工作。