当我创建WPF应用程序时,我的XAML很快就会膨胀。
然后我以HTML / CSS方式处理XAML /样式问题,寻找重复的代码并将其打包成我放入Window.Resources部分的样式。
这是其他人这样做的方式还是现在XAML有更好的方法?看起来下面的两个块只有两个小字不同,似乎我可以把它放在某种功能用户控件(这是一个左侧菜单)所以当我有我的菜单中有25个元素我可能只有25行与名称相同,也许是Click目标。
或者当我把它移到MVVM时,这个问题会自动处理DataBinding (它只是一个硬编码的原型),所以我可以保留菜单项的名称我的ViewModel中的一个集合,然后它在ItemsControl中动态创建菜单?
使用WPF应用程序或臃肿的XAML文件只是生活中的事实?
创建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>
答案 0 :(得分:1)
简单:识别重复并将其移动到控件中。控件可以具有在运行时组成所需变量所需的任何属性。并且可以通过作为控制来重新模仿。
答案 1 :(得分:0)
此外,您可以识别重复并将其移动到资源中。一种资源可以轻松引用另一种资源。