风格是这样的:
<Style TargetType="{x:Type c:Setup}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type c:Setup}">
<CheckBox x:Name="PART_CheckBox"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我想为安装程序创建一个名为'IsChecked'的属性,但检查CheckBox控件是否已选中。只有获取,而不是设置。
public class Setup : UserControl
{
public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool), typeof(Setup), new PropertyMetadata(false));
private CheckBox _CheckBox = null;
// -[ Constructor:
public Setup() : base()
{
}
static Setup()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Setup), new FrameworkPropertyMetadata(typeof(Setup)));
}
// -[ Template:
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
_CheckBox = (CheckBox) Template.FindName("PART_CheckBox", this);
_CheckBox.Unchecked += _CheckBox_Unchecked;
_CheckBox.Checked += _CheckBox_Unchecked;
_CheckBox.Indeterminate += _CheckBox_Unchecked;
}
private void _CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
IsChecked = _CheckBox.IsChecked == true;
}
// -[ Property:
public bool IsChecked
{
get { return (bool) GetValue(IsCheckedProperty); }
private set { SetValue(IsCheckedProperty, value); }
}
}
是否有其他选择将孩子IsChecked捕获为父母?
模板绑定仅用于显示存储的值,但不允许您设置它们如果要设置它们,您需要一个双向的常规绑定,但您必须告诉它连接到模板化的父级:
<Style TargetType="{x:Type c:Setup}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type c:Setup}">
<CheckBox IsChecked="{Binding Path=IsChecked , RelativeSource={RelativeSource TemplatedParent}}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>