WPF中切换按钮周围的轮廓
我有一些切换按钮,可以控制某些选项卡的可见性。按钮的样式使其按下时变为蓝色,不按下时变为灰色。问题是,当按下一个切换按钮时,另一个切换按钮将切换回灰色,但轮廓为蓝色。如果选择了其他控件(不是其中一个切换按钮),按钮将变为灰色,没有蓝色轮廓。我不要蓝色的轮廓 我的风格是:WPF中切换按钮周围的轮廓,wpf,styles,togglebutton,Wpf,Styles,Togglebutton,我有一些切换按钮,可以控制某些选项卡的可见性。按钮的样式使其按下时变为蓝色,不按下时变为灰色。问题是,当按下一个切换按钮时,另一个切换按钮将切换回灰色,但轮廓为蓝色。如果选择了其他控件(不是其中一个切换按钮),按钮将变为灰色,没有蓝色轮廓。我不要蓝色的轮廓 我的风格是: <Style x:Key="TabToggleButtonStyle" TargetType="{x:Type ToggleButton}"> <Setter Property="Background"
<Style x:Key="TabToggleButtonStyle" TargetType="{x:Type ToggleButton}">
<Setter Property="Background" Value="lightGray"/>
<Setter Property="Margin" Value="3" />
<Setter Property="Padding" Value="7,2,7,2" />
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="#FF41B8F2" />
</Trigger>
</Style.Triggers>
</Style>
切换:
<DockPanel LastChildFill="False">
<ToggleButton
DockPanel.Dock="Right"
Style="{StaticResource TabToggleButtonStyle}"
Click="BtnOneClick"
IsChecked="{Binding ElementName=_mainTabControl, Path=BtnOneTab.IsSelected}"
Content="Agent Info"/>
<ToggleButton
DockPanel.Dock="Right"
Style="{StaticResource TabToggleButtonStyle}"
Click="BtnTwoClick"
IsChecked="{Binding ElementName=_mainTabControl, Path=BtnTwoTab.IsSelected}"
Content="Help"/>
</DockPanel>
单击命令在选项卡上设置
IsSelected=true
。最可能的问题是焦点视觉样式。您可以通过将此构造添加到资源中来消除它:
<!-- StyleNoFocusRect -->
<Style x:Key="StyleNoFocusRect">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Control}">
<Canvas></Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后将其添加到您的ToggleButton样式中:
<Setter Property="FocusVisualStyle" Value="{StaticResource StyleNoFocusRect}"/>
这应该可以消除你的蓝色轮廓。我认为你的问题是
切换按钮的模板使用按钮图标
对可能的状态进行样式化,比如以键盘为焦点
因此,当您取消选中一个ToggleButton
按钮时,它仍将具有键盘焦点(因为您刚刚单击了它),因此它仍将被设置为这样的样式
ToggleButton
的默认模板如下所示
<ControlTemplate TargetType="{x:Type ToggleButton}">
<MS_Themes:ButtonChrome x:Name="Chrome"
BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}"
RenderMouseOver="{TemplateBinding IsMouseOver}"
RenderPressed="{TemplateBinding IsPressed}"
RenderDefaulted="{TemplateBinding Button.IsDefaulted}"
SnapsToDevicePixels="true">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</MS_Themes:ButtonChrome>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/>
</Trigger>
<Trigger Property="IsChecked" Value="true">
<Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
在.NET4.0中,我刚刚添加了这个
<Style TargetType="ToggleButton">
<Setter Property="Focusable" Value="False" />
</Style>
当我切换另一个按钮时,它删除了蓝色轮廓,但该按钮无法再通过键盘聚焦。感谢您的帮助,但这对我来说不起作用,不幸的是,这是我第一个.Net项目的第18天,所以如果我说了任何荒谬的话,请耐心等待。我尝试了您的模板,但它有几个错误,VS 2010不喜欢xmlns:MS_Themes=“clr namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero”引用,并将其替换为clr namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna。此外,后台属性是只读的,因此无法从xaml中设置,因此我将其删除。在这些更改之后,按钮的轮廓没有问题,但颜色是错误的。灰色/浅灰色而不是浅灰色/蓝色。我做了一些实验,但无法改变颜色。在将Aero导入项目并将
添加到
中后,检查触发一切工作正常。谢谢:)要使“MS_Themes”名称空间正常工作,您必须正确注册它(即向根XAML节点添加一个xmlns:MS_Themes=“clr namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero”
,Expression Blend将自动完成此操作)。
<Style TargetType="ToggleButton">
<Setter Property="Focusable" Value="False" />
</Style>