【问题标题】:WPF ToggleButton to look like normal buttonWPF ToggleButton 看起来像普通按钮
【发布时间】:2016-02-26 15:48:01
【问题描述】:

有没有一种简单的方法可以让 ToggleButton 显示为普通按钮?我正在尝试单击该按钮,它将触发 IsEnabled 对另一个控件为 false。使用 ToggleButton,我可以触发 IsChecked 属性。然而,ToggleButton 在切换时看起来完全不同。谢谢。

【问题讨论】:

    标签: c# wpf button


    【解决方案1】:

    在 WPF 设计器中,右键单击相关的 ToggleButton 并选择 Edit Template -> Edit a Copy。选择适当的设置并单击“确定”。

    ToggleButton 的默认模板将添加到您的 XAML。在那里,删除这段代码:

    <Trigger Property="IsChecked" Value="true">
        <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
    </Trigger>
    

    您可以将此样式/模板重复用于多个切换按钮。

    编辑

    您还有其他选择。使用标准的Button 并连接Click 事件处理程序或执行代码以更新IsChecked 属性的Command 绑定,例如

    <CheckBox IsChecked="{Binding IsChecked}" IsEnabled="False" Content="State" />
    <Button Content="Toggle" Command="{Binding ToggleStateCommand}" />
    

    那么,当然,你的命令只需要执行

    IsChecked = !IsChecked
    

    这一切都假设您有一个您熟悉的 ICommand 实现,并且您正在做一些 MVVM,但这可能有点超出本 Q/A 的范围。

    【讨论】:

    • 谢谢。有简单的方法吗?不想从 Button 复制样式代码。
    • 这很“简单”,而且“重复”——如果你可以这么说的话——是最小的。该模板仅使用自定义 ButtonChrome 对象,该对象具有来自当前应用的 Windows 主题的适当样式。这是我所提倡的唯一一种“重复”。也就是说,您对限制滥用行为的热情是值得拥有的。
    【解决方案2】:

    最简单的方法是使ToggleButton 透明,并在其内容中显示一些其他控件。为内容设置IsHitTestVisible = False

    也用 Margin 值做实验。

    <ToggleButton Background="Transparent" BorderBrush="Transparent" BorderThickness="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
        <Button Content="Toggle Button" Margin="-5" IsHitTestVisible="True" />
    </ToggleButton>
    

    上面可以自定义使用 ToggleButton 的内容,例如:

    <ToggleButton Content="Toggle Button" Background="Transparent" BorderBrush="Transparent" BorderThickness="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Canvas.Left="233" Canvas.Top="158">
        <ToggleButton.ContentTemplate>
            <DataTemplate>
                <Button IsHitTestVisible="False" Content="{Binding}"/>
            </DataTemplate>
        </ToggleButton.ContentTemplate>
    </ToggleButton>
    

    【讨论】:

    • 此解决方案在将鼠标悬停在按钮上时禁用动画
    • @Helic 您可以将动画向下移动到内部按钮。如果您发布动画代码,我可以修改我的答案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多