繁体   English   中英

自定义控件XAML中的C#WPF参考自定义属性值

[英]C# WPF reference custom property value inside custom control 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}" />

如果这样定义X,我如何在MyControl XAML代码中访问X的值:

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

您要从其中将其绑定到UserControl的属性。 最简单的方法是使用“ ElementName”绑定方法(Visual Studio通常将这些名称命名为“ userControl”),因此您将得到以下结果:

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

当我开始时,我永远不会记住这一点,但是如果您单击设计器中的小框并选择“创建数据绑定”,则可以通过一个不错的绑定向导:

在此处输入图片说明

您可以在其中选择控件中所有元素的属性。 这是一个使用ElementName绑定到名为“ Description”的属性的示例:

在此处输入图片说明

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM