2013-05-22 24 views
2

我想restyle一个WPF组合框被格式化为下拉列表类型,但删除选定的文本框,其中填充选定的内容只需用一些静态文本和一个保持不变的图像替换它,模拟一个像外观一样的按钮。WPF - 如何restyle组合框删除文本框/编辑框并替换为静态文本

所以实际上它变成了一个按钮下拉列表,所以当我从下拉列表中选择一个项目时,我可以通过命令绑定来填充另一个控件,其中的选定值和按钮样式依然存在。

基本上就是这样的原始图片,我一起入侵。

button drop-list

我已经看到了上下文菜单按钮的例子,但我不喜欢这个主意,和一个ComboBox完全符合我的需求的功能和方便的命令和数据绑定条款。

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

干杯 DIGGIDY

回答

0

经过大量的研究后,我决定更好的选择是去一个带有绑定上下文菜单的按钮,这最终成为更好的解决方案。

感谢您的帮助Marc。

+0

它不是很好吗?您是否尝试使用ComboBox上方的只读编辑框?结果看起来完全像你的例子。太糟糕了,不符合你的期望。我很高兴你的上下文菜单包围了! – Marc

+0

我发现组合不适合我的整体外观,但感谢您的帮助,因为我将更有可能使用我在这里学到的东西。 – DIGGIDY

0

我已经得到了同样的问题,其实,这很简单。 只需将一个只读组合框与一个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; 
    } 
} 
+0

感谢您的快速反应。几乎在那里,但这意味着索引0也包含在下拉列表中,是否有一种方法可以在不添加到列表中的情况下进行操作? – DIGGIDY

+0

是的,它包括但如果你选择它,什么都不会发生。作为取消选项。目前我没有看到任何其他答案,但我仍在考虑这个问题。 – Marc

+0

我想我可以通过xmal数据触发器来改变它的可见性,我正在玩wpf/xaml的相当有限的知识,看看我是否也可以做到这一点,然后我将有一个可行的解决方案 – DIGGIDY

0

[编辑]据对我来说,我更喜欢我以前的答案。所以请确保你,读者,我以前的答案不符合你的期望。

另一个答案是把你的对象放在ComboBox上面,然后从这个对象上捕获MouseDown事件并且放下ComboBox。在我的例子中,我使用了只读文本框。

参见:

<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. 
} 

它工作正常的我。

+0

我是用Microsoft Visual Studio Designer做的,所以确保这两个组件完全在同一座位上。 – Marc