Ho un controllo WPF che espone uno dei suoi figli (dal suo ControlTemplate) attraverso una proprietà di sola lettura. Al momento è solo una proprietà CLR, ma non credo che faccia alcuna differenza.Posso usare XAML per impostare una proprietà nidificata (proprietà del valore di una proprietà) di un controllo?
Voglio essere in grado di impostare una delle proprietà sul controllo figlio da XAML dove sto istanziando il controllo principale. (In realtà, vorrei legare ad essa, ma penso che l'impostazione che sarebbe stato un buon primo passo.)
Ecco po 'di codice:
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); }
}
}
Ecco i due modi in cui posso pensare di impostare la nidificato proprietà in XAML (né compilare):
<!--
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>
È possibile?
Senza di esso, suppongo che dovrò solo esporre i DP sul controllo principale che sono vincolati ai bambini (nel modello). Non così male, immagino, ma stavo solo cercando di evitare un'esplosione di proprietà sul controllo principale.
Cheers.
Sì, questo è quello che ho pensato. :-( Extra PS sul mio controllo di primo livello lo è, allora! – Swythan
BTW. Non può farlo come nel tuo esempio XAML, come io non voglio sostituire il valore esistente della proprietà XAxis con un nuova istanza di Axis. – Swythan
mi chiedo qual è la ragione per WPF non sostenere vincolante per le proprietà nidificate? Come altrimenti si finisce per duplicarli. – Vitalij