[英]CheckBox.AutoCheck in wpf
在WPF checkBox.AutoCheck
= false
的最簡單方法是什么? 特別是防止CheckBox 在點擊時更改IsChecked 。
CheckBox
仍應對點擊 ( Command
和/或InputBindings
) 做出反應 ,但不應嘗試在左鍵單擊或Space鍵上更改其可視狀態。
我可以通過使用Mode=OneWay
來防止綁定屬性更改,但這似乎對視覺狀態沒有影響, CheckBox
然后在我的屬性為false
被檢查,這讓我很難過......
這是一個復選框的示例:
<!-- make this checkbox behave as if AutoCheck = false -->
<CheckBox IsChecked="{Binding IsChecked, Mode=OneWay}"
Command="{Binding CommandLeftButtonOrSpace}">
<CheckBox.InputBindings>
<MouseBinding MouseAction="RightClick"
Command="{Binding CommandRightButton}" />
</CheckBox.InputBindings>
</CheckBox>
一個簡單的附加行為就可以了
public class CheckBoxBehavior
{
public static bool GetDisableAutoCheck(DependencyObject obj) => (bool)obj.GetValue(DisableAutoCheckProperty);
public static void SetDisableAutoCheck(DependencyObject obj, bool value) => obj.SetValue(DisableAutoCheckProperty, value);
public static readonly DependencyProperty DisableAutoCheckProperty =
DependencyProperty.RegisterAttached("DisableAutoCheck", typeof(bool),
typeof(CheckBoxBehavior), new PropertyMetadata(false, (d, e) =>
{
var checkBox = d as CheckBox;
if (checkBox == null)
throw new ArgumentException("Only used with CheckBox");
if ((bool)e.NewValue)
checkBox.Click += DisableAutoCheck_Click;
else
checkBox.Click -= DisableAutoCheck_Click;
}));
private static void DisableAutoCheck_Click(object sender, RoutedEventArgs e) =>
((CheckBox)sender).IsChecked = !((CheckBox)sender).IsChecked;
}
像這樣設置
<ComboBox local:CheckBoxBehavior.DisableAutoCheck="True" ... />
您可以通過繼承控件(來自另一個答案 )來防止它首先切換:
public class OneWayCheckBox : CheckBox
{
private class CancelTwoWayMetadata : FrameworkPropertyMetadata
{
protected override void Merge(PropertyMetadata baseMetadata, DependencyProperty dp)
{
base.Merge(baseMetadata, dp);
BindsTwoWayByDefault = false;
}
}
static OneWayCheckBox()
{
// Remove BindsTwoWayByDefault
IsCheckedProperty.OverrideMetadata(typeof(OneWayCheckBox), new CancelTwoWayMetadata());
}
protected override void OnToggle()
{
// Do nothing.
}
}
這也會切換IsChecked
的綁定類型,因此您無需記住將Mode=OneWay
置於其上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.