【问题标题】:Custom Style Button With Modified Background具有修改背景的自定义样式按钮
【发布时间】:2016-02-23 09:50:09
【问题描述】:

我有一个Button,我想要一个橙色Background 和一个白色Foreground。当我将鼠标悬停在Button 上时,我希望它显示在DarkOrange 中。这是我目前使用的Style。

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>                      
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="Background" Value="DarkOrange"/>
        </Trigger>
    </Style.Triggers>
</Style>

如果我不修改我的Button 的原始Background 颜色,则此样式可以正常工作。例如;

&lt;Button Grid.Row="2" Content="SIGN IN" /&gt;

没有问题。但是,当我想更改Button 的默认Background 时,即

&lt;Button Grid.Row="2" Content="SIGN IN" Background="Orange"/&gt;

样式不起作用。我认为这是因为我现在覆盖了 IsMouseOver 试图更改的 Background 属性。

有没有一种方法可以同时实现修改后的默认Background 和IsMouseOver 效果?我也试过设置&lt;Border Background="Orange"&gt;,但还是没有效果。

【问题讨论】:

    标签: c# wpf xaml button


    【解决方案1】:

    您可以将setter 添加到您的Style,而不是将Background 属性添加到您的Button。像这样:

    <Style TargetType="{x:Type Button}">
       <Setter Property="Background" Value="Orange"/>
       <Setter Property="Template">
           ...
       </Setter>
       <Style.Triggers>
           ... 
      </Style.Triggers>
    </Style>
    

    Here 是另一个如何使用它的示例。

    【讨论】:

      【解决方案2】:
        <Style TargetType="{x:Type Button}">
              <Setter Property="Template">
                  <Setter.Value>
                      <ControlTemplate x:Name="Border" TargetType="{x:Type Button}">
                          <Border x:Name="Border" Background="{TemplateBinding Background}">
                              <ContentPresenter x:Name="CP" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                          </Border>
                          <ControlTemplate.Triggers>
                              <Trigger Property="IsMouseOver" Value="True">
                                  <Setter TargetName="CP" Property="TextBlock.Foreground" Value="White"/>
                                  <Setter TargetName="Border" Property="Background" Value="DarkOrange"/>
                              </Trigger>
                          </ControlTemplate.Triggers>
                      </ControlTemplate>
                  </Setter.Value>
              </Setter>
          </Style>
      

      这工作正常

      <Button Grid.Row="2" Content="SIGN IN" Background="Orange"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-12
        • 2015-12-07
        • 2015-09-13
        • 2022-01-23
        • 1970-01-01
        • 2017-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多