通过此设置依赖项属性

本文关键字:属性 依赖 设置 | 更新日期: 2023-09-27 18:17:19

我已经创建了一个名为SelectableBorder的边界类型,它有一个名为"IsSelected"的附加属性。我在一些触发器中使用这个属性,例如:

<MultiTrigger.Conditions>
 <Condition Property="IsSelected" Value="True" />
 <Condition Property="IsMouseOver" Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
 <Setter Property="Background" Value="{DynamicResource AccentColorBrush3}" />
</MultiTrigger.Setters>

然而,在后台代码中,我没有办法设置IsSelected,我如何去创建一个属性,可以在xaml触发器和后台代码中使用?

当前的SelectableBorder代码

public class SelectableBorder : Border
{
    public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.RegisterAttached("IsSelected", typeof(bool), typeof(Border), new PropertyMetadata(false));
    public static void SetIsSelected(UIElement element, bool value)
    {
        element.SetValue(IsSelectedProperty, value);
    }
    public static bool GetIsSelected(UIElement element)
    {
        return (bool)element.GetValue(IsSelectedProperty);
    }
}

我还看到:

'SelectableBorder'初始化失败:'SelectableBorder'的类型初始化器抛出异常。

这表明我在第一次尝试时没有做得那么好。您能给我指点一下解决这些问题的正确方向吗?

通过此设置依赖项属性

既然你添加属性到DependencyObject,所以你可以使用正常的DependencyProperty而不是附加的一个。你可以使用附件,如果你想,但触发应该改变。此外,您的财产的所有者类型应该是SelectableBorder而不是Border。您还可以添加IsSelected CLR包装器,这样可以更容易地在后面的代码中设置/获取值。

public class SelectableBorder : Border
{
    public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register("IsSelected", typeof(bool), typeof(SelectableBorder), new PropertyMetadata(false));
    public bool IsSelected
    {
        get { return (bool)GetValue(IsSelectedProperty); }
        set { SetValue(IsSelectedProperty, value); }
    }
}