我如何从父模板中访问模板子项中的DependencyProperty?

问题描述 投票:1回答:1

风格是这样的:

<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捕获为父母?

c# wpf dependency-properties
1个回答
0
投票

模板绑定仅用于显示存储的值,但不允许您设置它们如果要设置它们,您需要一个双向的常规绑定,但您必须告诉它连接到模板化的父级:

<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>
© www.soinside.com 2019 - 2024. All rights reserved.