Restyling solo parte di un controllo wpf. È possibile?
-
22-07-2019 - |
Domanda
Voglio ridisegnare solo una parte di un controllo WPF.
(In particolare, voglio ingrandire i pulsanti di scorrimento su una barra di scorrimento)
Ora posso farlo senza problemi. Ho estratto lo stile predefinito. Ho apportato le modifiche necessarie e incluso lo stile modificato nella mia applicazione.
Il problema è che devo includere l'intero modello di controllo nello stile di sostituzione, quando tutto ciò che sto cambiando è di 2 valori.
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollBar">
<Grid Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}" />
<ColumnDefinition Width="1E-05*" />
<ColumnDefinition MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}" />
</... etc
Voglio solo cambiare MaxWidth sulle definizioni delle colonne in 50.
Quindi la mia domanda è questa: c'è un modo in cui posso apportare questa modifica al modello senza dover includere tutto il resto? Voglio ancora che tutte le altre parti del modello di controllo funzionino come quelle predefinite.
Soluzione
In questo caso dovresti essere in grado di farlo, poiché il modello raggiunge e prende il valore da una risorsa:
<ScrollBar xmlns:sys="clr-namespace:System;assembly=mscorlib">
<ScrollBar.Resources>
<sys:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}">50</sys:Double>
</ScrollBar.Resources>
</ScrollBar>
Se il modello avesse codificato il valore, sarebbe sfortunato.