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