2009-05-07 6 views
5

Çocuklardan birini (ControlTemplate'den) salt okunur bir özellik aracılığıyla ortaya çıkaran bir WPF Denetimi var. Şu anda sadece bir CLR özelliği, ama bunun bir fark yarattığını düşünmüyorum.Bir denetimin yuvalanmış özelliğini (özellik değerinin özelliği) ayarlamak için XAML kullanabilir miyim?

Ana denetimi başlattığım XAML'den çocuk denetimindeki özelliklerden birini ayarlayabilmek istiyorum. (Aslında, kendisine bağlamak istiyorum, ama iyi bir ilk adım olacaktır ayarı düşünüyorum.) Burada

bazı kod: Burada

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

Ben iç içe ayarlama düşünebilirsiniz iki yolu var XAML özelliği (hiçbiri derleme):

<!-- 
    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> 

Bu mümkün mü?

Bu olmadan, DP'leri (şablonda) çocuklara bağlanan ana kontrole maruz bırakmam gerekecek. O kadar da kötü değil sanırım, ama ana kontrolde bir özellik patlamasından kaçınmaya çalışıyordum.

Şerefe.

cevap

4

Bunu böyle yapamazsınız ... Yuvalanmış özelliklerine bir bağlamadaki yolundan erişebilirsiniz, ancak özelliğin değerini tanımladığınızda değil.

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

Evet, ben de öyle düşünmüştüm:

Böyle bir şey yapmak zorunda. :-( Üst düzey kontrolümde ekstra DP'ler, o zaman! – Swythan

+6

BTW. XAxis özelliğinin mevcut değerini değiştirmek istemediğimden, örneğin XAML'deki gibi yapamam. Axis'in yeni örneği – Swythan

+0

WPF'nin yuvalanmış özelliklere bağlanmayı desteklememesinin sebebi nedir? Aksi halde bunları çoğaltabilirsiniz. – Vitalij