2009-05-07 24 views
5

私はWPFコントロールの子供のうちの1つ(ControlTemplateから)を読み取り専用プロパティで公開しています。現時点ではCLRのプロパティですが、違いはありません。XAMLを使用して、コントロールのネストされたプロパティ(プロパティの値のプロパティ)を設定できますか?

メインコントロールをインスタンス化しているXAMLから、子コントロールのプロパティの1つを設定したいと考えています。

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); } 
    } 
} 

ここで私は、ネストされた設定を考えることができる2つの方法があります:(。実は、私はそれにバインドしたいと思いますが、私はそれが良い第一歩になる設定だと思う)

をここにいくつかのコードです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> 

これは可能ですか?

私はちょうど私がちょうど(テンプレートの中で)子供たちに結びつくメインコントロールにDPを公開する必要があると思います。それほど悪くないと思いますが、私は主なコントロールのプロパティの爆発を避けようとしていました。

乾杯。

答えて

4

このようにすることはできません。ネストされたプロパティは、バインディング内のパスを通じてアクセスできますが、プロパティの値を定義するとアクセスできません。

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

はええ、それは私が考えたものだ:

あなたはそのような何かをしなければなりません。 :-( 私のトップレベルコントロールの余分なDPはありますか? – Swythan

+6

BTW。XAxisプロパティの既存の値をaに置き換えたくないので、私はあなたの例のXAMLのようにできません。 Axisの新しいインスタンス – Swythan

+0

WPFがネストされたプロパティへのバインディングをサポートしていない理由は何ですか?そうでなければ、それらを複製することになります。 – Vitalij

関連する問題