gpt4 book ai didi

c# - 无法将附加属性绑定(bind)到另一个依赖属性

转载 作者:太空狗 更新时间:2023-10-29 17:43:43 24 4
gpt4 key购买 nike

我正在编写一个控件库。在这个库中有一些自定义面板,其中填充了用户 UIElements。由于我的 lib 中的每个子元素都必须具有“Title”属性,因此我编写了以下内容:

// Attached properties common to every UIElement
public static class MyLibCommonProperties
{
public static readonly DependencyProperty TitleProperty =
DependencyProperty.RegisterAttached(
"Title",
typeof(String),
typeof(UIElement),
new FrameworkPropertyMetadata(
"NoTitle", new PropertyChangedCallback(OnTitleChanged))
);

public static string GetTitle( UIElement _target )
{
return (string)_target.GetValue( TitleProperty );
}

public static void SetTitle( UIElement _target, string _value )
{
_target.SetValue( TitleProperty, _value );
}

private static void OnTitleChanged( DependencyObject _d, DependencyPropertyChangedEventArgs _e )
{
...
}
}

然后,如果我这样写:

<dl:HorizontalShelf>
<Label dl:MyLibCommonProperties.Title="CustomTitle">1</Label>
<Label>1</Label>
<Label>2</Label>
<Label>3</Label>
</dl:HorizontalShelf>

一切正常,属性获得指定值,但如果我尝试将该属性绑定(bind)到其他 UIElement DependencyProperty,如下所示:

<dl:HorizontalShelf>
<Label dl:MyLibCommonProperties.Title="{Binding ElementName=NamedLabel, Path=Name}">1</Label>
<Label>1</Label>
<Label>2</Label>
<Label Name="NamedLabel">3</Label>
</dl:HorizontalShelf>

将抛出异常:“无法在类型为‘Label’的‘SetTitle’属性上设置‘Binding’。只能在 DependencyObject 的 DependencyProperty 上设置‘Binding’。”

我错过了什么?如果我没有绑定(bind)到“名称”,而是绑定(bind)到 MyLibCommonProperties 中定义的其他附加属性,则绑定(bind)似乎工作正常。

提前致谢。

最佳答案

将 DependencyProperty 定义中的 UIElement 替换为 MyLibCommonProperties

public static readonly DependencyProperty TitleProperty =
DependencyProperty.RegisterAttached(
"Title",
typeof(String),
typeof(MyLibCommonProperties), // Change this line
new FrameworkPropertyMetadata(
"NoTitle", new PropertyChangedCallback(OnTitleChanged))
);

我认为这可能是因为绑定(bind)隐式使用指定的父类来调用 SetTitle() 所以它调用 Label.SetTitle() 而不是 MyLibCommonProperties.SetTitle()

我对一些自定义 TextBox 属性也有同样的问题。如果我使用 typeof(TextBox) 那么我不能绑定(bind)到值,但是如果我使用 typeof(TextBoxHelpers) 那么我可以

关于c# - 无法将附加属性绑定(bind)到另一个依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8092875/

24 4 0
文章推荐: c# - 使用深度数据 - Kinect
文章推荐: Angular @Output 和 EventEmitter 不工作
文章推荐: angular - 类型 'concatMap' 上不存在属性 'Observable'?