È possibile includere risorse Xaml in un ControlTemplate?
-
05-07-2019 - |
Domanda
Sto lavorando a un controllo basato su modelli Silverlight (ovvero deriva da Control e ha il suo aspetto implementato come ControlTemplate in generic.xaml) e ho riscontrato la necessità di un ValueConverter in uno dei miei binding. Normalmente creerei un'istanza di ValueConverter nelle Risorse del controllo con cui lavoro ma non riesco a capire come farlo con un ControlTemplate. Vorrei mantenere questa implementazione tutta in Xaml, se possibile, ma suppongo di poter sovrascrivere OnApplyTemplate e creare manualmente l'associazione con un convertitore.
Soluzione
Questo funziona in Silverlight 3. Devi solo aggiungere una sezione risorse all'interno del tuo modello di controllo e aggiungere ValueConverter alle risorse del modello:
<ControlTemplate TargetType="controls:MyControl">
<Grid Margin="8,40,8,20" x:Name="peopleListContainer">
<Grid.Resources>
<controls:MyValueConverter x:Key="converter" />
</Grid.Resources>
<!-- ....
Tuttavia, ValueConverters viene spesso utilizzato in modo improprio nei modelli di controllo. È possibile che si desideri utilizzare un TypeConverter. Bryant Likes ha scritto un buon articolo discutendo the differenza tra ValueConverter e TypeConverter in questo scenario .