将自定义依赖项属性添加到XAML中的控制模板

经过一段时间的rest后,我已经设法进一步使用我的只读复选框,现在以合理优雅的forms提供了我想要的function。 问题是我已经使用了一些黑客来使其工作,虽然这不是一个灾难,但做得更好会更好。

回顾一下:我想要一个常规查看复选框,在单击它时不会自我检查,而是单击事件会触发后台工作程序,稍后会导致更新变量。 此变量绑定到checkbox.ischecked,然后使用新值更新。

我想在这里使用基于这个想法的控件模板:

C#WPF中的只读CheckBox

我修改了这个并删除了我认为我不需要的东西(也许是不明智的)并最终得到:

                      

这个复选框的工作方式如上所述,我这样称呼它:

  

我做的黑客是使用’Tag’DependencyProperty将数据绑定带到控件模板中。 这绕过了通常导致复选框自检的任何机制。 要恢复到正常操作复选框,只需将绑定更改为Tag以绑定到IsChecked,并在BulletDecorator内部将TemplateBinding设置为IsChecked而不是Tag。

所以我想我的问题是:

  1. 我有错误的结束吗? 有没有我可以覆盖任何机制导致盒子自我检查的地方? 也许在ControlTemplate Triggers中?
  2. 是否一个好主意去除我认为刚从默认CheckBox引入的任何备用XAML,或者我应该尝试保留所有样式的完全替代品?
  3. 如果我所做的不是太疯狂,我可以在XAML中添加依赖属性,这样我就不必使用Tag属性了吗?
  4. 我也想到,也许我真正想要的是一个看起来像一个复选框的按钮控件,可能是一个隐形按钮,顶部有通常的动画复选框,我将数据绑定到图形。 对该计划的任何想法也将非常受欢迎。

非常感谢

埃德

我设法解决了这个问题和我的ReadOnlyCheckBox想法,最后我创建了一个基于Button的自定义控件,然后应用了一个样式使它看起来像CheckBox。 我添加了自己的IsChecked属性,该属性在用户单击时未设置但已绑定到数据,因此显示的检查仅在数据更改时显示。

C#:

  public class ReadOnlyCheckBoxControl : System.Windows.Controls.Button { public static DependencyProperty IsCheckedProperty; public ReadOnlyCheckBoxControl() { DefaultStyleKeyProperty.OverrideMetadata(typeof(ReadOnlyCheckBoxControl), new FrameworkPropertyMetadata(typeof(ReadOnlyCheckBoxControl))); } public bool IsChecked { get { return (bool)GetValue(IsCheckedProperty); } set { SetValue(IsCheckedProperty, value); } } static ReadOnlyCheckBoxControl() { IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool), typeof(ReadOnlyCheckBoxControl)); } } 

XAML: