我创建了一种名为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;的类型初始值设定项抛出异常。
我告诉我,我第一次尝试时表现不佳。能指导我解决这些问题的正确方向吗?
答案 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); }
}
}