私は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を公開する必要があると思います。それほど悪くないと思いますが、私は主なコントロールのプロパティの爆発を避けようとしていました。
乾杯。
はええ、それは私が考えたものだ:
あなたはそのような何かをしなければなりません。 :-( 私のトップレベルコントロールの余分なDPはありますか? – Swythan
BTW。XAxisプロパティの既存の値をaに置き換えたくないので、私はあなたの例のXAMLのようにできません。 Axisの新しいインスタンス – Swythan
WPFがネストされたプロパティへのバインディングをサポートしていない理由は何ですか?そうでなければ、それらを複製することになります。 – Vitalij