WPF 切换按钮 XAML 样式

标签 wpf xaml togglebutton wpf-style

所以我有两个切换按钮,我正在尝试组合 - 有点。所以第一个按钮会根据 IsChecked 是真还是假来切换图像,但是这个按钮周围有一个我无法摆脱的边框。

第二个切换按钮没有边框并且在单击时不会闪烁,但它也不会根据其状态更改图像。

我想要的是两全其美。更改图像并摆脱边框。我已经尝试了 23 种方法,但没有一种有效。

这是我正在使用的代码:

<ToggleButton x:Name="changeButBorderedBlinky" Margin="0,12,194,0" Width="82" Height="82" Background="Transparent" Padding="-1"  Focusable="false" VerticalAlignment="Top" HorizontalAlignment="Right">

        <ToggleButton.Style>
            <Style TargetType="{x:Type ToggleButton}">
                <Setter Property="Content">
                    <Setter.Value>
                        <Border BorderThickness="0"  >
                            <Image Source="images/buttonimages/back2.png" Stretch="Fill"  />
                        </Border>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Content">
                            <Setter.Value>
                                <Border  BorderThickness="0" >
                                    <Image Source="images/buttonimages/back.png" Stretch="fill" />
                                </Border>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ToggleButton.Style>

    </ToggleButton>
    <ToggleButton x:Name="noChangeNoBorder"  Margin="0,12,104,0" VerticalAlignment="Top" HorizontalAlignment="Right" Height="80" Width="80" >
        <ToggleButton.Template>
            <ControlTemplate TargetType="{x:Type ToggleButton}">
                <Border x:Name="border"  >
                    <Image x:Name="img" Source="images/buttonimages/back2.png"  />
                </Border>
            </ControlTemplate>
        </ToggleButton.Template>

    </ToggleButton>

感谢您对此的任何帮助。快把我逼疯了。

最佳答案

无论哪种情况,您的自定义选项都是无穷无尽的。你试过Expression Blend吗?它伴随着 Visual Studio 2013 Community (免费使用),它可以让您以任何您想要的方式自定义任一控件。

这里,使用 Expression Blend 完成,没有闪烁,没有边框,图像交换:

        <ToggleButton x:Name="changeButBorderedBlinky" Margin="0,12,194,0" Width="82" Height="82" Background="Transparent" Padding="-1"  Focusable="false" VerticalAlignment="Top" HorizontalAlignment="Right">
        <ToggleButton.Template>
            <ControlTemplate TargetType="{x:Type ButtonBase}">
                <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                <ControlTemplate.Triggers>
                    <Trigger Property="Button.IsDefaulted" Value="True"/>
                    <Trigger Property="IsMouseOver" Value="True"/>
                    <Trigger Property="IsPressed" Value="True"/>
                    <Trigger Property="ToggleButton.IsChecked" Value="True"/>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </ToggleButton.Template>
        <ToggleButton.Style>
            <Style TargetType="{x:Type ToggleButton}">
                <Setter Property="Content">
                    <Setter.Value>
                        <Border BorderThickness="0"  >
                            <Image Source="images/buttonimages/back2.png" Stretch="Fill"  />
                        </Border>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Content">
                            <Setter.Value>
                                <Border  BorderThickness="0" >
                                    <Image Source="images/buttonimages/back.png" Stretch="fill" />
                                </Border>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ToggleButton.Style>

    </ToggleButton>

关于WPF 切换按钮 XAML 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337819/

相关文章:

wpf - 如何在不设置 IsEnabled 的情况下防止 ToggleButton 被切换

javascript - 在网页上的列中放置的 2 个选项卡之间切换,而无需更改其余页面元素

c# - wpf - 将数据上下文绑定(bind)到单例类的静态属性

c# - 打包 URL 和单元测试。我的环境有问题?

c# - 我如何或可以为 TextBlock 上的 StringFormat 使用静态资源?

wpf - 如何将 List 作为 ItemSource 绑定(bind)到 XAML 中的 ListView?

c# - 更改背景切换按钮

wpf - Datagrid列格式: how to specify multiline and right-align text?

c# - WPF - ListView 中的 TextBlock 未水平对齐

c# - 如何格式化绑定(bind)的 wpf 数据网格文本列以不显示新的 DateTimes?