WPF在UserControl中更改子项的值

时间:2016-12-14 14:05:43

标签: c# wpf xaml user-controls

我需要更改 CustomControl 控件 MainWindow 的值。 所以我想说要从 MainWindow.xaml 更改 UserControl MyControl 中的标签 内容

示例:

<UserControl x:Class="XXXXX.MyUserControl"
.
.
.
>
    <Grid>
        <Label x:Name="TestLabel"/>
    </Grid>
</UserControl>

在MainWindow.xaml中: <MyUserControl x:Name="TestControl" />

现在如何从MainWindow.xaml中的Xaml Designer访问Label.Content?

我没有找到任何东西,所以希望有人知道该怎么做。

非常感谢

2 个答案:

答案 0 :(得分:1)

在UserControl中公开自定义属性,如下所示

public partial class MyUserControl : UserControl
{
    public MyUserControl()
    {
        InitializeComponent();

        var dpd = DependencyPropertyDescriptor.FromProperty(LabelContentProperty, typeof(MyUserControl));
        dpd.AddValueChanged(this, (sender, args) =>
        {
            _label.Content = this.LabelContent;           
        });
    }

    public static readonly DependencyProperty LabelContentProperty = DependencyProperty.Register("LabelContent", typeof(string), typeof(MyUserControl));

    public string LabelContent
    {
        get 
        {
            return GetValue(LabelContentProperty) as string;
        }
        set 
        {
            SetValue(LabelContentProperty, value);
        }
    }
}

在MainWindow的xaml中

<MyUserControl x:Name="TestControl" LabelContent="Some Content"/>

答案 1 :(得分:0)

将以下内容添加到您的UserControl

<UserControl x:Class="XXXXX.MyUserControl"
  DataContext="{Binding RelativeSource={RelativeSource Self}}"
.
.
>

让用户控件实现INotifyPropertyChanged

将属性添加到用户控件中,如下所示

   Private _LabelText As String 
    Public Property LabelText() As String
        Get
            Return _LabelText
        End Get
        Set(ByVal value As String)
            _LabelText = value
            OnPropertyChanged("LabelText")
        End Set
    End Property

将标签更新为从该属性绑定

<Label x:Name="TestLabel" Content="{Binding Path=LabelText}"/>

然后在您的MainWindow中,您可以适当地更改属性

<MyUserControl x:Name="TestControl" LabelText="Testing" />

然后您的代码也可以引用该属性