WPF - Combobox与ItemTemplate中的按钮,单击SelectedItem

时间:2015-03-25 17:27:39

标签: wpf button combobox wpf-controls

我有一个组合框,其中包含条目和操作列表作为文本和按钮:

[ Item #1 [Preview] v ]
| Item #2 [Preview]   |
| Item #3 [Preview]   |
| Item #4 [Preview]   |

问题是用户只能点击下拉列表中的按钮,但不能点击所选项目上的按钮。基本上任何ComboCox点击都会导致下拉列表打开。

有没有办法将下拉限制为仅限V按钮?或者以其他方式使所选项目中的按钮可以点击?

这是我的XAML

<ComboBox ItemsSource="{Binding LayoutsList}" >
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" />
                <Button 
                    Command="{Binding PreviewCommand}" 
                    CommandParameter="{Binding}"
                    >Preview</Button>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

1 个答案:

答案 0 :(得分:1)

我认为只有覆盖整个ComboBox.Template才有可能。下拉列表出现在MouseDown上,它似乎取消了项目中的任何后续事件处理程序,例如Button.Click事件,所以我认为除了覆盖模板之外还有其他办法。

作为替代方案,您可以尝试使用PreviewMouseLeftButtonDown确定鼠标是否在[预览]按钮上,如果是,请设置e.Handled = true并显示SelectedItem的预览。我不知道一个简单的方法,但不确定调查这条路线是否值得。