C#WPF引用自定义控件xaml中的自定义属性值

时间:2016-04-28 15:53:17

标签: c# wpf xaml

我有自己的自定义控件,自定义属性定义如下:

public partial class MyControl : UserControl
{
    public CustomProperty X
    {
        get { return (CustomProperty) GetValue(XProperty); }
        set { SetValue(XProperty, value); }
    }

    public static readonly DependencyProperty XProperty = DependencyProperty.Register(
        "X", typeof (CustomProperty), typeof (MyControl), null);

    public MyControl()
    {
        InitializeComponent();
    }
}

假设我在XAML中设置X值,如下所示:

<controls:MyControl X="{Binding CustomPropertyValue}" />

如果MyControl XAML代码定义如下,如何访问X的值:

<UserControl>
    <Button Content="<!--What to put here to access X?-->" />
</UserControl>

1 个答案:

答案 0 :(得分:1)

您希望将其绑定到UserControl的属性中。最简单的方法是使用“ElementName”绑定方法(通常Visual Studio将这些命名为“userControl”),这样你最终会得到:

<Button Content="{Binding MyProperty, ElementName=userControl}"/>

当我开始时,我永远无法记住这一点,但如果你单击设计器中的小方框并选择“创建数据绑定”,你可以通过一个很好的向导进行绑定:

enter image description here

您可以从控件中的所有元素中选择属性。这是使用ElementName:

绑定到名为“Description”的属性的示例

enter image description here

值得注意的是,我发现在列表包含新的自定义依赖项属性之前,这通常需要构建。

这是一个很好的界面,用于探索如何以各种方式创建绑定。您可能也可以使用“FindAncestor”而不是“ElementName”执行此操作,并最终得到以下内容:

<Button Content="{Binding Description, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MyCustomControlType}}}"/>

但命名可能更容易,更有效。