当我创建 WPF 应用程序时,我的 XAML 很快就开始膨胀。
然后我以 HTML/CSS 的方式处理 XAML/样式问题,寻找重复的代码并将其打包到我放入 Window.Resources 部分的样式中。
这是其他人正在这样做的方式,还是现在在 XAML 中有更好的方式?似乎下面的两个块仅在两个小词上有所不同,似乎我可以将它放在某种功能性用户控件中(这是左侧菜单),这样当我的菜单中有 25 个元素时,我可以只有 25 行与名称相同,可能还有 Click 目标。
或者,当我将其移至 MVVM 时,此问题将通过 DataBinding 自行解决(它目前只是一个硬编码原型),因此我可以将菜单项的名称保存在我的 ViewModel 的集合中,然后创建在 ItemsControl 中动态菜单?
或者,臃肿的 XAML 文件只是WPF 应用程序的现实吗?
创建 WPF 应用程序时,您有哪些 XAML 样式策略?
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>