我試圖做一個多選擇組合框,除了選擇,一切似乎都工作正常,我使用了一個包含選擇複選框的自定義模板,我忽略了所有標準組合框選擇。更改複選框的命中區域
選擇行可以在用戶特別點擊複選框或其文本時起作用,但如果用戶單擊可見的組合框,它會關閉下拉框並且不會點擊複選框。我希望能夠點擊組合框行中的任何位置來檢查複選框。
我把一個透明的矩形(調試熱粉紅色)上面的複選框,取而代之的輸入,並設置選中的變量。該矩形接收輸入,但它仍然將單擊事件傳遞到組合框,並因此選擇組合框行並關閉下拉菜單。
數據模板
<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;
}
}
反正是有延長的複選框的命中框,而沒有經過click事件到組合框?
它和我的矩形解決方案完全一樣,只是使用邊框。它不能解決問題,如果我不清楚,我會編輯我的初始文章。謝謝 – Midimatt 2012-03-02 17:32:20