我正在尝试复制Word中的左/中/右对齐工具栏按钮。单击“左对齐”按钮时,取消选中“中心”和“右”按钮。我正在使用带有ToggleButtons的WPF ListBox。
问题是用户可以单击两次左对齐按钮。第二次单击会导致按钮取消选中并将基础值设置为null。我想第二次点击什么都不做。
想法?强制ListBox始终有一个选定的项目?防止视图模型中的null(需要刷新ToggleButton绑定)?
<ListBox ItemsSource="{x:Static domain:FieldAlignment.All}" SelectedValue="{Binding Focused.FieldAlignment}">
<ListBox.ItemTemplate>
<DataTemplate>
<ToggleButton IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}">
<TextBlock Text="{Binding Description}" />
</ToggleButton>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:3)
是的,我更喜欢这种情况下的无线电按钮,但是如果你想使用togglebutton,那么也许你可以将isenabled属性绑定到缺陷状态,这样当它被检查时就不能被阻塞了
答案 1 :(得分:2)
从ToggleButton创建自定义控件, 在* .xaml.cs文件中,声明并定义控件
public class ToggleButton2 : ToggleButton
{
public bool IsNotCheckable
{
get { return (bool)GetValue(IsNotCheckableProperty); }
set { SetValue(IsNotCheckableProperty, value); }
}
// Using a DependencyProperty as the backing store for IsNotCheckable. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsNotCheckableProperty =
DependencyProperty.Register("IsNotCheckable", typeof(bool), typeof(ToggleButton2), new FrameworkPropertyMetadata((object)false));
protected override void OnToggle()
{
if(!IsNotCheckable)
{
base.OnToggle();
}
}
}
在* .xaml中,用我的:ToggleButton2替换ToggleButton,然后你可以将IsNotCheckable绑定到IsChecked,就像下面一样,
<my:ToggleButton2 IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" IsNotCheckable="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Mode=OneWay}">
答案 2 :(得分:1)
我不会将其作为ToggleButtons实现,而是将RadioButtons与自定义模板一起使用。这可能会让你头疼不已。