7

我是使用 WPF 的新手,我正在尝试申请(Style例如背景TextBox,应该是橙色)。为了实现这一点,我做了类似的事情:ButtonMenuItem

<Style TargetType="TextBox" x:Key="sampleTextBox">
    <Setter Property="Margin" Value="2"/>
    <Setter Property="FontFamily" Value="Verdana"/>
    <Setter Property="FontSize" Value="11px"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
                <GradientStop Color="#FFFFD190" Offset="0.2"/>
                <GradientStop Color="Orange" Offset="0.85"/>
                <GradientStop Color="#FFFFD190" Offset="1"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

Button并为目标类型和目标菜单重复相同的代码。这工作得很好。但我想通过可能有多个目标类型值来最小化重复代码的数量。

请让我知道是否可能。

谢谢。

4

3 回答 3

9
  <Window.Resources>
    <Style x:Key="sampleTextBox">
        <Setter Property="Control.FontFamily" Value="Verdana"/>
        <Setter Property="Control.FontSize" Value="11px"/>
        <Setter Property="Control.FontWeight" Value="Bold"/>
        <Setter Property="Control.Background">
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
                    <GradientStop Color="#FFFFD190" Offset="0.2"/>
                    <GradientStop Color="Orange" Offset="0.85"/>
                    <GradientStop Color="#FFFFD190" Offset="1"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<StackPanel>
    <TextBlock Text="This is a string and it should be wrapped." Style="{StaticResource sampleTextBox}"/>
    <TextBox Text="This is a string and it should be wrapped." Style="{StaticResource sampleTextBox}"/>
</StackPanel>
于 2013-08-12T09:13:37.847 回答
3

Style 有一个属性BasedOnhttp://msdn.microsoft.com/en-us/library/system.windows.style.basedon.aspx有了这个,您可以使用样式继承。定义具有通用属性的基本样式并派生具有特定属性的子样式。

于 2013-08-12T09:13:33.077 回答
2

您可以FrameworkElement用作TargetType

<Style TargetType="FrameworkElement" x:Key="CommonStyle">
    <Setter Property="Control.Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
                <GradientStop Color="#FFFFD190" Offset="0.2"/>
                <GradientStop Color="Orange" Offset="0.85"/>
                <GradientStop Color="#FFFFD190" Offset="1"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

然后通过继承 (BasedOn) 为每个元素使用特定样式CommonStyle

<Style TergetType="TextBox" BasedOn="{StaticResource CommonStyle}" x:Key="TextBoxStyle">
     <Setter Property="Margin" Value="2"/>
     <Setter Property="FontFamily" Value="Verdana"/>
     <Setter Property="FontSize" Value="11px"/>
     <Setter Property="FontWeight" Value="Bold"/>
</Style>
于 2013-08-12T09:11:20.447 回答