通过此设置依赖项属性
本文关键字:属性 依赖 设置 | 更新日期: 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); }
}
}