由此设置依赖属性

时间:2015-10-11 12:47:11

标签: c# wpf xaml controls dependency-properties

我创建了一种名为SelectableBorder的Border,它有一个名为" 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);
    }
}

我也看到了:

&#39; SelectableBorder&#39;初始化失败:&#39; SelectableBorder&#39;的类型初始值设定项抛出异常。

我告诉我,我第一次尝试时表现不佳。能指导我解决这些问题的正确方向吗?

1 个答案:

答案 0 :(得分:2)

由于您要向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); }
    }
}