Когда я создаю приложения WPF, мой XAML очень быстро начинает раздуваться.
Затем я подхожу к вопросу о стиле XAML / HTML / CSS , ища повторяющийся код и упаковывая его в стили, которые я вставил в раздел Window.Resources.
Это так, как это делают другие, или сейчас есть какой-то лучший способ в XAML? Просто кажется, что два блока ниже отличаются только по двум маленьким словам, кажется, что я мог бы поместить его в какой-то функциональный пользовательский элемент управления (это меню слева), так что когда у меня есть 25 элементы в моем меню, я мог бы просто иметь 25 одинаковых строк с именами и, возможно, цели Click.
Или, возможно, когда я перенесу это в MVVM, эта проблема сама решится с помощью DataBinding (в настоящее время это просто жестко запрограммированный прототип), поэтому я могу сохранить названия пунктов меню в коллекция в моей ViewModel, а затем он динамически создает меню в ItemsControl?
Или раздутые файлы XAML - это просто факт жизни с приложениями WPF?
Какие стратегии стиля XAML используются при создании приложений WPF?
Window.Resources (начало файла):
<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:
<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>