带有ItemTemplate的ComboBox,包含一个按钮

Bri*_*sio 3 silverlight wpf combobox itemtemplate

所以,假设我有一个带有自定义数据模板的ComboBox.数据模板中的一个项目是按钮:

<ComboBox Width="150" ItemsSource="{Binding MyItems}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Button Content="ClickMe" /> 
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

这个问题是该按钮吃掉了点击,如果选择了该按钮,项目就不会被选中.这意味着下拉菜单不会消失,也不会选择任何项目.

我知道为什么会发生这种情况.

有办法解决它吗?可能是一种处理按钮单击的方法(我绑定到命令)并告诉它继续向上链,这样组合框也可以处理点击?

注意:我在Silverlight中看到了我的问题,但我猜测WPF可以看到完全相同的行为.

Bri*_*sio 8

好的,我明白了.这是一个完全黑客攻击,但它仍然允许我将命令绑定到按钮并继续使用组合框行为来选择项目:

<ComboBox x:Name="MyCombo" Width="150" ItemsSource="{Binding MyItems}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Button Content="ClickMe" Click="Button_Click" /> 
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

并在代码背后:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MyCombo.SelectedItem = (sender as Button).DataContext;
    MyCombo.IsDropDownOpen = false;
}
Run Code Online (Sandbox Code Playgroud)

如果我真的想要,我可以将SelectedItem和IsDropDownOpen绑定到我的ViewModel中的属性,但我决定不将它作为XAML的黑客扩展来保持这种行为,以保持我的ViewModel干净.