Blend:创建一组ToggleButton:一次只检查一个

时间:2015-05-13 07:37:29

标签: wpf user-interface user-controls expression-blend blend

在Blend for Visual Studio中: 如何创建一组ToggleButtons,其中一次只检查一个ToggleButton或者没有?

  • 我尝试使用RadioButtons并编辑了他们的模板,使它们看起来像ToggleButtons。但是我应该将它们分组,只检查其中一个(或没有)?

  • 我还尝试创建一个Listbox并使用ToggleButtons作为项目,但这也不起作用。

如果没有其他办法,也许有人可以轻松解释如何使用我尝试的其中一种解决方案。

非常感谢!

2 个答案:

答案 0 :(得分:2)

您应该使用RadioButtons并将Style属性设置为ToggleButton

<RadioButton Style="{StaticResource {x:Type ToggleButton}}" />

Panel中的所有RadioButtons(例如StackPanel)都会自动分组。因此,如果检查了一个RadioButton,则所有其他人将取消选中。

<StackPanel>
    <RadioButton Content="Windows XP" IsChecked="True" Style="{StaticResource {x:Type ToggleButton}}"/>
    <RadioButton Content="Windows Vista" Style="{StaticResource {x:Type ToggleButton}}"/>
    <RadioButton Content="Windows 7" Style="{StaticResource {x:Type ToggleButton}}"/>
</StackPanel>

如果您想在一个公共面板中对RadioButtons进行分组,可以通过设置不同的GroupNames来划分它们,如下所示:

<StackPanel>
    <RadioButton GroupName="Os" Content="Windows XP" IsChecked="True"/>
    <RadioButton GroupName="Os" Content="Windows Vista" />
    <RadioButton GroupName="Os" Content="Windows 7" />
    <RadioButton GroupName="Office" Content="Microsoft Office 2007" IsChecked="True"/>
    <RadioButton GroupName="Office" Content="Microsoft Office 2003"/>
    <RadioButton GroupName="Office" Content="Open Office"/>
</StackPanel>

这会将“Office”和“OS”RadioButtons分为同一小组中的两个独立群组。

答案 1 :(得分:0)

由于RadioButton继承了ToggleButton,您可以使用RadioButton的分组功能,并恢复由RadioButton覆盖到其原始ToggleButton行为的切换功能。

public class ToggleRadioButton : RadioButton
{
    protected override void OnToggle()
    {
        if (IsChecked == true) IsChecked = IsThreeState ? (bool?)null : (bool?)false;
        else IsChecked = IsChecked.HasValue;
    }
}