wpf - wpf可以使用XAML来设置控件的嵌套属性( 属性值的属性)?

  显示原文与译文双语对照的内容

通过只读属性,我得到了一个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 ( 既不编译) 中设置嵌套属性的两种方法:


<!-- 


 This doesn't work:


"The property 'XAxis.Maximum' does not exist in XML namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'."


"The attachable property 'Maximum' was not found in type 'XAxis'."


-->


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



<!-- 


 This doesn't work: 


"Cannot set properties on property elements."


-->


<local:ChartControl>


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


</local:ChartControl>



这甚至可能?

没有它我想我只需要公开一个主控件,通过这个主控件绑定到子对象( 在模板中) 。 我想不是那么坏,但是我只是想避免主控制器的属性爆炸。

干杯。

时间: 作者:

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

你必须执行以下操作:


<local:ChartControl>


 <local:ChartControl.XAxis>


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


 </local:ChartControl.XAxis>


</local:ChartControl>



作者:
...