我有一个包含UserControl
的{{1}},现在我正在加载另一个包含TextBox
的{{1}}。单击按钮时,我要分配输入的值在UserControl
至TextBlock
的另一个控件中。我该怎么办?
主用户控件
TextBox
另一个用户控件
TextBlock
Main UserControl.cs 加载另一个UserControl。
<UserControl x:Class="IntelliVentory.UserControls.CategoryControl"
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:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
d:DesignHeight="670" d:DesignWidth="1100">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Name="CategoryNameBox" Width="350" />
<Button Grid.Row="1" Click="AddCategoryFunc">Load Another Control</Button>
<Grid Grid.Row="2" Name="CategoriesWraper"></Grid>
</Grid>
</UserControl>
答案 0 :(得分:0)
您想要类似
categoryMod.CategoryNameValue = categoryControl.CategoryNameValue;
因此,您需要定义两个属性,一个CategoryNameValue
属性,您可以获取 TextBox的Text值,另一个CategoryNameValue
属性,您可以 >设置 TextBlock的Text属性。
在CategoryControl
类中定义此属性
public string CategoryNameValue { get { return CategoryNameBox.Text; }
这是CategoryModule类中的
public string CategoryNameValue { set { CategoryName.Text = value; }
您可以在代码中开始使用它们。
您可以将它们定义为Dependency Properties而不是普通的CLR属性,然后使用data binding。通过数据绑定,两个用户控件都可以绑定到相同的数据模型,因此它们的值会自动同步。
修改:
原来,您可以从外部访问UserControl的子元素,就像它们是公共字段一样。也就是说,您可以编写这样的代码而无需定义新属性
CategoryModule categoryMod = new CategoryModule();
categoryMod.CategoryName.Text = CategoryNameBox.Text;
CategoriesWraper.Children.Add(categoryMod);