Quali sono le tue strategie per inserire XAML negli stili?
Domanda
Quando creo applicazioni WPF, molto rapidamente il mio XAML inizia a gonfiarsi.
io poi affrontare il problema XAML/stile in modo HTML/CSS, cercando codice ripetitivo e comprimendolo in stili che inserisco nella sezione Window.Resources.
È questo il modo in cui lo fanno gli altri o esiste ora un modo migliore in XAML?Sembra proprio che i due blocchi sottostanti differiscano solo per due paroline, sembra che potrei inserirlo in una sorta di controllo utente funzionale (questo è un menu sul lato sinistro) in modo che quando ho 25 elementi nel mio menu potrei avere solo 25 righe uguali con i nomi e forse i target di clic.
O forse quando lo sposto su MVVM il problema si risolverà da solo con DataBinding (attualmente è solo un prototipo hardcoded), quindi posso mantenere i nomi delle voci di menu in una raccolta nel mio ViewModel e quindi creare il menu dinamicamente in un ItemsControl?
O i file XAML gonfiati sono solo un dato di fatto con le applicazioni WPF?
Che tipo di strategie di stile XAML hai quando crei applicazioni WPF?
Window.Resources (parte superiore del file):
<Window.Resources>
<Style x:Key="Link" TargetType="Button">
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Foreground" Value="#555"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock TextDecorations="Underline"
Text="{TemplateBinding Content}"
Background="{TemplateBinding Background}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
XAML corrente:
<Expander HorizontalAlignment="Left" Header="File" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2">
<Expander.Background>
<LinearGradientBrush>
<GradientStop Color="#bbb" Offset="0"/>
<GradientStop Color="#ccc" Offset="1"/>
</LinearGradientBrush>
</Expander.Background>
<Border CornerRadius="5">
<Border.Background>
<LinearGradientBrush>
<GradientStop Color="#ccc" Offset="0"/>
<GradientStop Color="#bbb" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top">
<Button Click="buttonClose_Click"
Style="{StaticResource Link}"
Margin="10 3 3 3"
Content="Close">
</Button>
</StackPanel>
</Border>
</Expander>
<Expander HorizontalAlignment="Left" Header="Customers" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2">
<Expander.Background>
<LinearGradientBrush>
<GradientStop Color="#bbb" Offset="0"/>
<GradientStop Color="#ccc" Offset="1"/>
</LinearGradientBrush>
</Expander.Background>
<Border CornerRadius="5">
<Border.Background>
<LinearGradientBrush>
<GradientStop Color="#ccc" Offset="0"/>
<GradientStop Color="#bbb" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top">
<Button Click="btnAppPage_Click"
Tag="CustomerAdd"
Style="{StaticResource Link}"
Margin="10 3 3 3"
Content="Create Customer"/>
</StackPanel>
</Border>
</Expander>
Soluzione
Semplice:identificare la ripetizione e spostarla in un controllo.Il controllo può avere qualsiasi proprietà necessaria per comporre le variazioni richieste in fase di esecuzione.E può essere rimodellato poiché è un controllo.
Altri suggerimenti
Inoltre, puoi identificare le ripetizioni e spostarle nelle risorse.Una risorsa può facilmente fare riferimento a un'altra.