您将XAML置于样式中的策略是什么?

时间:2009-04-08 08:25:14

标签: wpf xaml styling

当我创建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>

2 个答案:

答案 0 :(得分:1)

简单:识别重复并将其移动到控件中。控件可以具有在运行时组成所需变量所需的任何属性。并且可以通过作为控制来重新模仿。

答案 1 :(得分:0)

此外,您可以识别重复并将其移动到资源中。一种资源可以轻松引用另一种资源。