将自定义依赖项属性添加到XAML中的控制模板
经过一段时间的rest后,我已经设法进一步使用我的只读复选框,现在以合理优雅的forms提供了我想要的function。 问题是我已经使用了一些黑客来使其工作,虽然这不是一个灾难,但做得更好会更好。
回顾一下:我想要一个常规查看复选框,在单击它时不会自我检查,而是单击事件会触发后台工作程序,稍后会导致更新变量。 此变量绑定到checkbox.ischecked,然后使用新值更新。
我想在这里使用基于这个想法的控件模板:
C#WPF中的只读CheckBox
我修改了这个并删除了我认为我不需要的东西(也许是不明智的)并最终得到:
这个复选框的工作方式如上所述,我这样称呼它:
我做的黑客是使用’Tag’DependencyProperty将数据绑定带到控件模板中。 这绕过了通常导致复选框自检的任何机制。 要恢复到正常操作复选框,只需将绑定更改为Tag以绑定到IsChecked,并在BulletDecorator内部将TemplateBinding设置为IsChecked而不是Tag。
所以我想我的问题是:
- 我有错误的结束吗? 有没有我可以覆盖任何机制导致盒子自我检查的地方? 也许在ControlTemplate Triggers中?
- 是否一个好主意去除我认为刚从默认CheckBox引入的任何备用XAML,或者我应该尝试保留所有样式的完全替代品?
- 如果我所做的不是太疯狂,我可以在XAML中添加依赖属性,这样我就不必使用Tag属性了吗?
- 我也想到,也许我真正想要的是一个看起来像一个复选框的按钮控件,可能是一个隐形按钮,顶部有通常的动画复选框,我将数据绑定到图形。 对该计划的任何想法也将非常受欢迎。
非常感谢
埃德
我设法解决了这个问题和我的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: