Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中切换按钮周围的轮廓_Wpf_Styles_Togglebutton - Fatal编程技术网

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>