我需要一个按钮式菜单,即水平排列的一组始终可见的按钮。
像单选按钮一样,它们应该有一个selected属性,即 click-command 应该仅在选定状态更改为 true 时触发,而不是像普通按钮那样在每次单击时触发。
3 回答
伙计,这是 WPF,您可以使用任何符合您的某些或任何要求的控件,然后简单地为其提供一个新控件ControlTemplate
。顺便说一句,没有Selected
或IsSelected
财产RadioButton
...也许你指的是IsChecked
财产?此属性是从 继承的ToggleButton
,因此可能更合适。
由于ToggleButton
已经是Button
,您甚至可以在不为其提供新ControlTemplate
的情况下逃脱。
至于您对Click
事件的要求,我认为您不会在任何 WPF 控件上找到该功能,但可以手动实现:
private void Button_Click(object sender, RoutedEventArgs e)
{
if (ToggleButton.IsChecked == true)
{
// Do something here when the `Button.IsChecked` == true
}
}
RadioButton
也像其他按钮Click
在每次点击时触发事件一样。上也没有 Selected 属性RadioButton
。
但是,如果您希望自己MenuItems
像Button
,那么您可以ToggleButton
在这里使用。
ToggleButton
具有IsChecked
跟踪按钮的选中状态的属性,以及在选中Checked
时触发的事件ToggleButton
。
此外,如果您想在单击其他 ToggleButton 时自动选中/取消选中您的 ToggleButtons,那么您可以使用您的RadioButton
并覆盖它,如下所示:DataTemplate
MenuItem
Template
<RadioButton Content="MyRadio" Click="RadioButton_Click">
<RadioButton.Template>
<ControlTemplate TargetType="RadioButton">
<ToggleButton Checked="ToggleButton_Checked" IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}}" Content="{TemplateBinding Content}"/>
</ControlTemplate>
</RadioButton.Template>
</RadioButton>
事实证明,在 WrapPanel 中具有水平布局的 ListBox非常适合我的场景。我在另一个问题中发布了解决方案。