我如何从模板 child 中创建一个要从 parent 访问的 DependencyProperty?
How i make a DependencyProperty from a template child to be accessed from the parent?
风格是这样的:
<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 控件是否已选中。只有 Get,没有 Set。
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); }
}
}
是否有其他替代方法来捕获 child IsChecked 到 parent?
模板绑定只能单向显示存储的值,但不允许您设置它们
如果你想设置它们,你需要一个双向的正常绑定,但你必须告诉它连接到模板化的父级:
<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>
风格是这样的:
<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 控件是否已选中。只有 Get,没有 Set。
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); }
}
}
是否有其他替代方法来捕获 child IsChecked 到 parent?
模板绑定只能单向显示存储的值,但不允许您设置它们 如果你想设置它们,你需要一个双向的正常绑定,但你必须告诉它连接到模板化的父级:
<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>