WPF中的切换按钮

4
我有两个 ToggleButton,我希望在任何时候只有其中一个处于 Pressed 状态。假设当前 Model ToggleButton 被按下:
我想实现以下概念:
  1. 如果我按下 Drawing ToggleButton,则 Model ToggleButton 将取消选中,而 Drawing ToggleButton 将变为选中状态。
  2. 如果按下已经选中的 Model Button,则不会发生任何事情。
顺便说一下,这是我迄今为止所做的:(代码未提供)
<ToggleButton Width="50" Height="23"  Margin="0 0 0 0">Model</ToggleButton>
<ToggleButton Width="50" Height="23"  Margin="0 0 7 0">Drawing</ToggleButton>

更新:

通过评论中提供的链接,我得出了以下内容:

<RadioButton Style="{StaticResource {x:Type ToggleButton}}" Content="Model" IsChecked="True" />
<RadioButton Style="{StaticResource {x:Type ToggleButton}}" Content="Drawing" />

现在以上代码给了我两个按钮,但是如何样式化它们呢?我知道如何进行样式化。但是我不知道在这里应该样式化什么?我的意思是,我已经填充了样式属性,那么如何样式化 ToggleButton 本身呢?

7
看起来你需要的是两个单选按钮,如果你不喜欢它们的外观,只需更改它们的模板即可。 - King King
同时,RadioButton 继承自 ToggleButton - King King
3
如何让 WPF 中的一组切换按钮像单选按钮一样工作? - DLeh
1
@Vahid - 在DLeh提供的链接中,得票最高的答案适用于您。 - Rohit Vats
1
@Vahid 背景很容易,但形状意味着为按钮创建一个全新的模板。 - Rachel
显示剩余6条评论
2个回答

3

由于RadioButton继承自ToggleButton,因此您可以将ToggleButton样式设置为它,并像这样使用BasedOn来继承ToggleButton的默认样式:

<RadioButton GroupName="Test" Width="50" Height="23" Margin="0 0 7 0"
                Content="Model">
    <RadioButton.Style>
        <Style TargetType="ToggleButton"
               BasedOn="{StaticResource {x:Type ToggleButton}}">
            <Setter Property="Background" Value="Red"/>
            <!-- Set other properties here-->
        </Style>
    </RadioButton.Style>
</RadioButton>

1
谢谢Rohit。这正是我需要开始的东西。 - Vahid

2
根据这个答案DLeh在评论中提供的链接,您可以通过将RadioButton样式设置为使用ToggleButton样式来实现此操作。
<RadioButton Style="{StaticResource {x:Type ToggleButton}}" />

回答你的第二个问题,关于如何自定义此属性的样式,你可以创建另一个从基本ToggleButton样式继承的样式,并使用它来代替。就像这样:
<Style x:Key="CustomToggleButtonStyle" 
       TargetType="{x:Type RadioButton}" 
       BasedOn="{StaticResource {x:Type ToggleButton}}">
    // Custom Style setters here
</Style>

<RadioButton Style="{StaticResource CustomToggleButtonStyle}" />

当然,您还可以选择完全从头开始重写整个模板。 MSDN有一个很好的自定义ToggleButton模板示例,您可以使用它作为起点。

非常感谢你的链接,Rachel。它对我帮助很大。 - Vahid
@Vahid Np,我在创建自己的模板时经常使用该链接,因为一个好的模板实际上需要比基本外观更多的东西 :) - Rachel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接