gpt4 book ai didi

.net - DataTrigger 中的 WPF 自定义附加属性

转载 作者:行者123 更新时间:2023-12-04 21:45:07 24 4
gpt4 key购买 nike

我在 SO 上看过类似的问题,但无法找到解决方案,所以这是我的交易:

** 我有以下类(class):**

public static class ControlSecurity
{
public static readonly DependencyProperty IsSecuredProperty =
DependencyProperty.RegisterAttached(
"IsSecured",
typeof (bool),
typeof (FrameworkElement),
new PropertyMetadata(false));

[AttachedPropertyBrowsableForType(typeof(Control))]
public static bool GetIsSecured(FrameworkElement ctl)
{
return (bool)ctl.GetValue(IsSecuredProperty);
}

public static void SetIsSecured(FrameworkElement ctl, bool value)
{
ctl.SetValue(IsSecuredProperty, value);
}
}

如您所料,它将 Security:ControlSecurity.IsSecured 添加到所有 FrameworkElement

注意:Security:指向所有这些类所在的命名空间(包括 ControlSecurity)

所以我已经为我的一个控件实现了这个数据模板和样式:

       <DataTemplate x:Key="SecureButtonTemplate">
<StackPanel Orientation="Horizontal">
<Image x:Name="SecureIcon" Source="pack://application:,,,/Resources/Icons/secure.png" Width="16" Height="16" Visibility="Collapsed" />
<ContentPresenter Content="{Binding}" />
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}, Path=Security:ControlSecurity.IsSecured}" Value="true">
<Setter TargetName="SecureIcon" Property="Visibility" Value="Visible" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<Style TargetType="{x:Type Button}">
<Setter Property="ContentTemplate" Value="{StaticResource SecureButtonTemplate}" />
</Style>

这里的问题在于 DataTrigger 的绑定(bind):

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}, Path=Security:ControlSecurity.IsSecured}

我的想法是,我想找到父按钮,并绑定(bind)到我定义的 Security:ControlSecurity.IsSecured 附加属性。

我已经尝试了大约 10 种不同的绑定(bind)变体,但我总是收到类似这样的绑定(bind)错误:

System.Windows.Data Error: 40 : BindingExpression path error: 'Security:ControlSecurity' property not found on 'object' ''Button' (Name='')'. BindingExpression:Path=Security:ControlSecurity.IsSecured; DataItem='Button' (Name=''); target element is 'ContentPresenter' (Name=''); target property is 'NoTarget' (type 'Object')

我在这一点上被难住了,希望 WPF 专家提供一些见解。

最佳答案

只需添加括号:

Path=(Security:ControlSecurity.IsSecured)

关于.net - DataTrigger 中的 WPF 自定义附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3514294/

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