Мог Ваше сообщение Ваш тест, который показывает, что вызов ToLower () быстрее, чем нечувствительное к регистру сравнение? Мои тесты показывают напротив быть верными! Независимо, точки других плакатов о правильности стоят.
Я полагаю, что обработчик событий и поведение по умолчанию просто отменяют друг друга, поэтому флажок кажется отключенным ...
На самом деле мне недавно пришлось сделать то же самое. Мне пришлось унаследовать от CheckBox
и переопределить OnToggle
:
public class MyCheckBox : CheckBox
{
public bool InvertCheckStateOrder
{
get { return (bool)GetValue(InvertCheckStateOrderProperty); }
set { SetValue(InvertCheckStateOrderProperty, value); }
}
// Using a DependencyProperty as the backing store for InvertCheckStateOrder. This enables animation, styling, binding, etc...
public static readonly DependencyProperty InvertCheckStateOrderProperty =
DependencyProperty.Register("InvertCheckStateOrder", typeof(bool), typeof(MyCheckBox), new UIPropertyMetadata(false));
protected override void OnToggle()
{
if (this.InvertCheckStateOrder)
{
if (this.IsChecked == true)
{
this.IsChecked = false;
}
else if (this.IsChecked == false)
{
this.IsChecked = this.IsThreeState ? null : (bool?)true;
}
else
{
this.IsChecked = true;
}
}
else
{
base.OnToggle();
}
}
}