设置XAML按钮样式时出现问题

时间:2014-06-03 21:02:55

标签: wpf xaml button

我想要的效果:我有一组按钮,它们应该是一组单选按钮(一次只能激活一个按钮)。我想让最后按下的按钮变成不同的颜色(背景),当按下另一个按钮时切换。我在 EXCEPT 后面的代码中工作,背景不会改变,直到鼠标移动到按钮所在的区域之外。

我非常希望从后面的XAML代码中完全设置按钮样式。我发现了一篇类似的文章,我试过了一个片段。它修复了这个问题,但它有很多其他问题(文本消失,按钮大小问题,边框大小问题,对齐问题),我无法按原样使用它。我尝试过消除碎片,添加碎片,但我让它变得更糟。

   <Style TargetType="{x:Type Button}">
      <Setter Property="Background" Value="Gray"/>
      <Setter Property="Foreground" Value="White"/>
      <!-- Setter Property="BorderBrush" Value="White" / -->
      <!-- Setter Property="Padding" Value="12,4,12,4" />
      <Setter Property="VerticalAlignment" Value="Center" /-->
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
               <Border Background="{TemplateBinding Background}"
                       BorderBrush="{TemplateBinding BorderBrush}"
                       BorderThickness="{TemplateBinding BorderThickness}">

                    <ContentPresenter HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        Margin="{TemplateBinding Margin}" />
                </Border>
             </ControlTemplate>
          </Setter.Value>
       </Setter>
       <Style.Triggers>
          <Trigger Property="IsMouseOver" Value="True">
             <Setter Property="Background" Value="Maroon"/>
             <Setter Property="Foreground" Value="White"/>
           </Trigger>
           <Trigger Property="IsMouseOver" Value="False">
              <Setter Property="Background" Value="Gray"/>
              <Setter Property="Foreground" Value="White"/>
           </Trigger>
       </Style.Triggers>
   </Style>

这是我创建的插件的主视图,它是更大的应用程序的一部分。它对此视图有一些影响,然后对此视图中的动态区域产生不同的影响。这很复杂。正如我所说的,我更倾向于在C#中做它并让它做我告诉它做的事。

似乎上面应该有一小部分可以解决问题,但我已经阅读了一些关于Button&#34;不尊重&#34;这个或那个。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

关于你的场景,我会考虑使用一个单选按钮(re:TargetType =&#34; {x:Type RadioButton}&#34;)因为这将允许你利用IsChecked属性,并且您可以在没有任何代码的情况下针对IsChecked定义样式更改。

对于单选按钮,您可以在模板中添加(或编辑)

<Trigger Property="IsChecked" Value="true">
     <Setter Property="Background" Value="White"/>
</Trigger>

例如,如果您希望按钮的背景在选中时变为白色(或模板的任何组件,如果您使用TargetName =&#34; MyElementName&#34;)定位它。

答案 1 :(得分:0)

我删除了&lt; Setter Property =“Template”/&gt;部分,它不那么难看。它与原版略有不同,但是好的/好的方式。我仍然在我的插件的主视图中有这个:

<Style TargetType="{x:Type Button}">
  <Setter Property="Background" Value="Gray"/>
  <Setter Property="Foreground" Value="White"/>
   <Style.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
         <Setter Property="Background" Value="Maroon"/>
         <Setter Property="Foreground" Value="White"/>
       </Trigger>
       <Trigger Property="IsMouseOver" Value="False">
          <Setter Property="Background" Value="Gray"/>
          <Setter Property="Foreground" Value="White"/>
       </Trigger>
   </Style.Triggers>
</Style>