我有自己的自定义控件,自定义属性定义如下:
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>
答案 0 :(得分:1)
您希望将其绑定到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}}}"/>
但命名可能更容易,更有效。