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

Wpf 设置XAML按钮样式时出现问题,wpf,xaml,button,Wpf,Xaml,Button,我想要达到的效果是:我有一组按钮,它们实际上应该是单选按钮的集合(一次只有一个处于活动状态)。我想使最后按下的按钮具有不同的颜色(背景),在按下另一个按钮时切换。我在后面的代码中使用了这一点,除了鼠标移动到按钮所在区域之外,背景不会改变 我更喜欢从XAML代码中完全设置按钮样式。我找到了一篇类似的文章,其中有一个我尝试过的片段。它解决了这个问题,但它有太多的其他问题(文本消失、按钮大小问题、边框大小问题、对齐问题),我无法按原样使用它。我试着消除碎片,增加碎片,但我让它变得更糟 <S

我想要达到的效果是:我有一组按钮,它们实际上应该是单选按钮的集合(一次只有一个处于活动状态)。我想使最后按下的按钮具有不同的颜色(背景),在按下另一个按钮时切换。我在后面的代码中使用了这一点,除了鼠标移动到按钮所在区域之外,背景不会改变

我更喜欢从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#来做,让它按照我告诉它的去做


看起来上面应该有一小部分能起作用,但我读过一些关于巴顿“不尊重”这个或那个的文章。提前感谢您的帮助。

我删除了部分,它的不稳定性大大降低。它与原版稍有不同,但方式还行/不错。我的插件的主视图中仍然有以下内容:

<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>


关于您的方案,我将考虑使用单选按钮(RE:TargetType=“{x:Type RadioButton }”),因为这将允许您利用ISCHECK属性,并且可以在没有任何代码的情况下对ISCHECK定义样式更改。 对于单选按钮,只需在模板中添加(或编辑)



例如,如果您希望按钮的背景在选中时变为白色(或模板的任何组件,如果您使用TargetName=“MyElementName”)。

您是指鼠标悬停时的蓝色吗?我认为您的做法是错误的。使用RadioButton控件和RadioButton样式。你有表达式混合吗?我同意W/Ryuy使用Excel的例外。如果我不在项目结束时,我会考虑移动到单选按钮。照现在的样子,它在工作,所以它保持原样。
<Trigger Property="IsChecked" Value="true">
     <Setter Property="Background" Value="White"/>
</Trigger>