Я пытаюсь создать поле со множественным выбором, кажется, что все работает нормально, кроме выбора, я использую пользовательский шаблон, включая флажок для выбора, я игнорирую все стандартные варианты выбора со списком.
Выбор строк работает, когда пользователь щелкает конкретно по флажку или его тексту, однако, если пользователь нажимает видимый комбинированный элемент, он закрывает раскрывающийся список и не устанавливает флажок.Я хотел бы иметь возможность щелкнуть в любом месте строки со списком, чтобы установить флажок.
Я поставил прозрачный прямоугольник (ярко-розовый для отладки) над флажком, который вместо этого принимает ввод и устанавливаетпроверенная переменная.Прямоугольник получает входные данные, однако он также передает событие щелчка в поле со списком и в результате выбирает строку со списком и закрывает раскрывающийся список.
Шаблон данных
<DataTemplate x:Key="CheckBoxTemplate">
<Grid>
<Rectangle VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Fill="HotPink" IsHitTestVisible="True">
<i:Interaction.Behaviors>
<behaviors:HitBoxBehaviour IsChecked="{Binding IsChecked, Mode=TwoWay}"/>
</i:Interaction.Behaviors>
</Rectangle>
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding Name}" Tag="{Binding Id}" HorizontalAlignment="Stretch" Height="25" FontSize="14"
VerticalAlignment="Stretch"/>
</Grid>
</DataTemplate>
Поведение
public class HitBoxBehaviour : Behavior<Rectangle>
{
public bool IsChecked
{
get { return (bool)GetValue(IsCheckedProperty); }
set { SetValue(IsCheckedProperty, value); }
}
public static readonly DependencyProperty IsCheckedProperty =
DependencyProperty.Register("IsChecked", typeof(bool), typeof(HitBoxBehaviour),
new PropertyMetadata(false, new PropertyChangedCallback(parameterChanged)));
private static void parameterChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
}
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.MouseLeftButtonDown += new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);
}
void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
IsChecked = !IsChecked;
e.Handled = true;
}
}
В любом случае можно ли расширить поле попадания флажка, не передавая событие щелчка вниз в поле со списком?