我想要的效果:我有一组按钮,它们应该是一组单选按钮(一次只能激活一个按钮)。我想让最后按下的按钮变成不同的颜色(背景),当按下另一个按钮时切换。我在 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;这个或那个。提前感谢您的帮助。
答案 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>