Wpf 我可以使用XAML设置控件的嵌套属性(属性值的属性)吗?

Wpf 我可以使用XAML设置控件的嵌套属性(属性值的属性)吗?,wpf,data-binding,properties,nested,Wpf,Data Binding,Properties,Nested,我有一个WPF控件,它通过只读属性公开它的一个子控件(来自它的ControlTemplate)。目前它只是一个CLR属性,但我不认为这有什么区别 我希望能够在实例化主控件的XAML中设置子控件的一个属性。(实际上,我想绑定到它,但我认为设置它将是一个很好的第一步。) 下面是一些代码: public class ChartControl : Control { public IAxis XAxis { get; private set; } public override voi

我有一个WPF控件,它通过只读属性公开它的一个子控件(来自它的ControlTemplate)。目前它只是一个CLR属性,但我不认为这有什么区别

我希望能够在实例化主控件的XAML中设置子控件的一个属性。(实际上,我想绑定到它,但我认为设置它将是一个很好的第一步。)

下面是一些代码:

public class ChartControl : Control
{
    public IAxis XAxis { get; private set; }

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        this.XAxis = GetTemplateChild("PART_XAxis") as IAxis;
    }
}

public interface IAxis
{
    // This is the property I want to set
    double Maximum { get; set; }
}

public class Axis : FrameworkElement, IAxis
{
    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(double), typeof(Axis), new FrameworkPropertyMetadata(20.0, FrameworkPropertyMetadataOptions.AffectsRender, OnAxisPropertyChanged));

    public double Maximum
    {
        get { return (double)GetValue(MaximumProperty); }
        set { SetValue(MaximumProperty, value); }
    }
}
以下是在XAML中设置嵌套属性的两种方法(均不编译):


这可能吗

如果没有它,我想我只需要公开主控件上绑定到子控件的DP(在模板中)。我想还不错,但我只是想避免主控件上的属性爆炸


干杯。

你不能这样做。。。可以通过其在绑定中的路径访问嵌套属性,但在定义属性值时不能

你必须这样做:

<local:ChartControl>
    <local:ChartControl.XAxis>
        <local:Axis Maximum="{Binding Maximum}"/>
    </local:ChartControl.XAxis>
</local:ChartControl>


是的,我就是这么想的:-(那么,我的顶级控件上有额外的DPs!顺便说一句。我不能像您的示例XAML那样做,因为我不想用Axis的新实例替换XAxis属性的现有值。我想知道WPF不支持绑定到嵌套属性的原因是什么?否则,您会复制它们。
<local:ChartControl>
    <local:ChartControl.XAxis>
        <local:Axis Maximum="{Binding Maximum}"/>
    </local:ChartControl.XAxis>
</local:ChartControl>