WPF - 如何重新设置ComboBox以删除文本框/编辑框并替换为静态文本

时间:2013-05-22 10:59:31

标签: wpf combobox wpf-controls

我想重新设计一个WPF ComboBox,它被格式化为一个下拉列表类型,但是删除所选的TextBox,它被填充了所选内容,只需用一些静态文本和一个保持不变的图像替换它,模拟一个按钮就像看。

因此它实际上变成了一个按钮下拉列表,所以当我从下拉列表中选择一个项目时,我可以通过命令绑定填充另一个控件,并使用其选定的值并保留按钮样式。

基本上像我这样粗暴的画面一起被黑了。

button drop-list

我已经看过带有上下文菜单的按钮示例,但我不喜欢这个想法,而且ComboBox在功能和简单的命令和数据绑定方面完全符合我的需求。

我知道可以做到,但是在阅读了基于其他控件的过于混乱的例子后,我对自己的能力失去了信心。我无法找到一个详细说明我需要学习的例子。

干杯 DIGGIDY

3 个答案:

答案 0 :(得分:1)

经过多次游戏后,我觉得更好的选择是选择带有绑定上下文菜单的按钮,这最终成为了更好的解决方案。

感谢你的帮助Marc。

答案 1 :(得分:0)

我遇到了同样的问题,实际上,这很简单。 只需将只读ComboBox与SelectionChanged事件放在一起即可。 你将索引0放在静态文本中。

现在,当用户选择某个内容时,获取所选项目,然后将SelectedIndex设置为0.因此,您获得了用户选择的项目,但显示的文本是相同的。

请参阅:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox combo = (ComboBox)sender;
    if (combo.SelectedIndex > 0)
    {
        // Do your stuff here...

        // Then
        combo.SelectedIndex = 0;
    }
}

答案 2 :(得分:0)

[编辑] 据我说,我更喜欢我之前的回答。因此,请确保您,读者,我之前的答案与您的期望不符。 [/编辑]

另一个答案是将您的对象放在ComboBox上方,然后从此对象捕获MouseDown事件并删除ComboBox。我在我的例子中使用了只读的TextBox。

请参阅:

<Grid>
    <ComboBox x:Name="Combo" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="TEST" />
        <ComboBoxItem Content="TEST1" />
        <ComboBoxItem Content="TEST2" />
        <ComboBoxItem Content="TEST3" />
    </ComboBox>
    <TextBox HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" Text="TextBox" VerticalAlignment="Top" Width="120" IsReadOnly="True" PreviewMouseDown="TextBox_PreviewMouseDown"/>
</Grid>

然后是背后的代码:

private void TextBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    e.Handled = true; // Prevents the event.
    Combo.IsDropDownOpen = true; // Drops down the ComboBox.
}

它适用于我。