Wpf 您将XAML放入样式的策略是什么?
当我创建WPF应用程序时,我的XAML很快开始膨胀 然后,我以HTML/CSS的方式处理XAML/style问题,寻找重复的代码并将其打包成样式,并将其放入我的Window.Resources部分 其他人是这样做的,还是现在XAML中有更好的方法?下面的两个块似乎只在两个小词上有所不同,似乎我可以将它放在某种功能用户控件中(这是一个左侧菜单),这样当我的菜单中有25个元素时,我就可以有25行相同的名称,也许还有单击目标 或者,当我将其移动到MVVM时,这个问题将通过数据绑定自行解决(目前它只是一个硬编码的原型),因此我可以将菜单项的名称保留在ViewModel的集合中,然后在ItemsControl中动态创建菜单 或者,对于WPF应用程序来说,臃肿的XAML文件只是生活中的一个事实吗 创建WPF应用程序时,您有什么样的XAML样式化策略 Window.Resources(文件顶部):Wpf 您将XAML放入样式的策略是什么?,wpf,xaml,styling,Wpf,Xaml,Styling,当我创建WPF应用程序时,我的XAML很快开始膨胀 然后,我以HTML/CSS的方式处理XAML/style问题,寻找重复的代码并将其打包成样式,并将其放入我的Window.Resources部分 其他人是这样做的,还是现在XAML中有更好的方法?下面的两个块似乎只在两个小词上有所不同,似乎我可以将它放在某种功能用户控件中(这是一个左侧菜单),这样当我的菜单中有25个元素时,我就可以有25行相同的名称,也许还有单击目标 或者,当我将其移动到MVVM时,这个问题将通过数据绑定自行解决(目前它只是一
<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>
<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>
当前XAML:
<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>
<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>
简单:识别重复并将其移动到控件中。控件可以具有在运行时合成所需变体所需的任何属性。而且,它可以作为控件重新模板化。此外,您还可以识别重复并将其转移到资源中。一种资源可以很容易地引用另一种资源。我一直在使用UserControls加载内容页面(左侧的菜单,每一页都是UserControls),但不是为了页面上的一点点重复,您是指此处描述的自定义用户控件吗: