Immaginate un controllo denominato Testko come questo:TemplateBinding non si associa alla proprietà dell'effetto?
public class Testko: Control
{
public static readonly DependencyProperty TestValueProperty;
static Testko()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Testko), new FrameworkPropertyMetadata(typeof(Testko)));
TestValueProperty = DependencyProperty.Register("TestValue", typeof(double), typeof(Testko), new UIPropertyMetadata((double)1));
}
public double TestValue
{
get { return (double)GetValue(TestValueProperty); }
set { SetValue(TestValueProperty, value); }
}
}
Niente di speciale, solo un controllo vuoto con un solo doppio proprietà con un valore di default è impostato su (doppio) 1. Ora, un'immagine di stile generico come questo:
<Style TargetType="{x:Type local:Testko}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Testko}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<StackPanel Orientation="Vertical">
<StackPanel.Effect>
<BlurEffect Radius="{TemplateBinding TestValue}" />
</StackPanel.Effect>
<Button Content="{TemplateBinding TestValue}" Margin="4" />
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Ora, il problema è che la proprietà Raggio non è mai legato per qualche motivo. Dove il contenuto di Button è correttamente associato alla proprietà TestValue. Sono sicuro che mi manca qualcosa di ovvio. O no?
Dopo aver risposto, ho trovato http://stackoverflow.com/questions/1131222/wpf-templatebinding-vs-relativesource-templatedparent la cui risposta è abbastanza interessante per quanto riguarda la differenza tra Binding e TemplateBinding – Timores
Sembra una specie di bug per me. Grazie per la soluzione :-) –
Ricevo l'errore "Campo proprietà dipendenza mancante" segnalato nell'editor XAML su "{TemplateBinding DialogHeight}", dove DialogHeight è una proprietà che appartiene a una classe derivata da "INotifyPropertyChanged". Ovviamente anche in fase di runtime ci sono alcuni errori di binding. Cambiare il binding come consigliato risolve i miei problemi. Grazie. –