gpt4 book ai didi

wpf - 附加属性的样式触发器

转载 作者:行者123 更新时间:2023-12-04 01:55:33 25 4
gpt4 key购买 nike

我创建了自己的附加属性,如下所示:

 public static class LabelExtension
{
public static bool GetSelectable(DependencyObject obj)
{
return (bool)obj.GetValue(SelectableProperty);
}
public static void SetSelectable(DependencyObject obj, bool value)
{
obj.SetValue(SelectableProperty, value);
}
// Using a DependencyProperty as the backing store for Selectable. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectableProperty =
DependencyProperty.RegisterAttached("Selectable", typeof(bool), typeof(Label), new UIPropertyMetadata(false));
}

然后我正在尝试创建一种带有依赖于它的触发器的样式:
<!--Label-->
<Style TargetType="{x:Type Label}">
<Style.Triggers>
<Trigger Property="Util:LabelExtension.Selectable" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Label}">
<TextBox IsReadOnly="True" Text="{TemplateBinding Content}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>

但是我遇到了运行时异常:
Cannot convert the value in attribute 'Property' to object of type 'System.Windows.DependencyProperty'.  Error at object 'System.Windows.Trigger' in markup file 

如何在样式触发器中访问附加属性的值?我曾尝试将 DataTrigger 与 RelativeSource 绑定(bind)一起使用,但它并没有通过该值。

最佳答案

您的触发器声明很好,但您附加的属性声明有一个小故障。依赖属性的所有者类型必须是声明它的类型,而不是您计划将其附加到的类型。所以这:

DependencyProperty.RegisterAttached("Selectable", typeof(bool), typeof(Label)...

需要改成这样:
DependencyProperty.RegisterAttached("Selectable", typeof(bool), typeof(LabelExtension)...
^^^^^^^^^^^^^^^^^^^^^^

关于wpf - 附加属性的样式触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com