如果ParentUserControl
包含TextBlock
。 ParentUserControl
还包含具有ChildUserControl
的{{1}}。我想从TextBox
设置TextBlock
的{{1}}。我该怎么办?
换句话说,以某种方式访问ParentUserControl
和它的ChildTextBox
元素,然后从ParentUserControl
修改它的值!
更新
我有一个包含TextBlock
的{{1}}的xaml窗口。现在,我正在运行时加载或添加另一个ChildUserControl
到其中。这个新添加的ParentUserControl
包含一个TextBlock
。现在,我希望当我在此ChildUserControl
中输入一些值时,ChildUserControl
的{{1}}应该获得该值并自我更新。
答案 0 :(得分:0)
假设我们没有遵循任何MVVM,并且解决此问题的简单方法是
使用下面的文本框创建一个ChildUserControl,
<UserControl x:Class="SO52840402.ChildUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SO52607887"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<TextBox x:Name="ChildTextBox" />
</Grid> </UserControl>
创建一个包含TextBlock和ChildUserControl实例的ParentUserControl,如下所示,
<UserControl x:Class="SO52840402.ParentUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SO52607887"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock x:Name="ParentTextBlock" Text="Hallo World!"/>
<local:ChildUserControl x:Name="ChildUserControl" Grid.Row="1" />
</Grid> </UserControl>
现在在“ InitializeComponent”之后从ParentUserControl构造函数后面的代码为ChildUserControl下的TextBox创建一个TextChanged事件,如下所示,
public ParentUserControl()
{
InitializeComponent();
ChildUserControl.ChildTextBox.TextChanged += OnChildTextBox_TextChanged;
}
private void OnChildTextBox_TextChanged(object sender, EventArgs e)
{
ParentTextBlock.Text = (sender as TextBox).Text;
}
注意:-这不是推荐的方法。为获得最佳方法,请遵循MVVM模式并了解您的要求并进行设计。由于您需要从子用户控件到父用户控件的某些东西,因此最好的方法是将ViewModel绑定到父子控件,并在父viewmodel中访问子视图模型并执行“所需的操作”。