从另一个UserControl WPF修改UserControl的文本块

时间:2018-09-01 13:15:03

标签: c# wpf xaml

我有一个包含UserControl的{​​{1}},现在我正在加载另一个包含TextBox的{​​{1}}。单击按钮时,我要分配输入的值在UserControlTextBlock的另一个控件中。我该怎么办?

主用户控件

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>  

1 个答案:

答案 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);