为window.resources样式创建自定义绑定属性

我之前为自定义控件创建了几个自定义绑定,但由于这种情况是针对按钮的window.resources样式(相反,一个控件模板),我不知道从哪里开始代码。 我将在哪里创建viewmodel,它将inheritance或引用什么?

XAML:

                                

Hovercolor setter是这里的关键

创建一个viewmodel来自定义wpf按钮颜色是一种错误的方法。 按钮颜色方案是严格属于视图的东西。 此外,许多按钮意味着许多视图模型实例,因为每个按钮可能都是唯一的 – 这样一个简单设置的代码太多了。

Button类没有足够的依赖项属性来设置表示HoverColorBackground / HoverColorBorder / HoverColorForeground的颜色。 替代方法是创建派生的Button类(当DP具有某种复杂类型和/或具有关联逻辑时的方式)或使用附加属性。 我写了一个小贴士,它涵盖了第二种方法 。

精简版

创建一个附加的DP

 public static class Alt { #region Background public static readonly DependencyProperty BackgroundProperty = DependencyProperty.RegisterAttached("Background", typeof(Brush), typeof(Alt), new PropertyMetadata(null)); public static Brush GetBackground(DependencyObject obj) { return (Brush)obj.GetValue(Alt.BackgroundProperty); } public static void SetBackground(DependencyObject obj, Brush value) { obj.SetValue(Alt.BackgroundProperty, value); } #endregion } 

设置该属性的自定义值

  

确保该模板知道如何使用该属性

    

适用于任何控制。 许多DP可以任意组合混合。