WPF ComboBox在样式化后显示对象类型

时间:2010-03-25 15:58:29

标签: wpf combobox wpf-controls

在我的项目中,我使用ComboBox和我的自定义对象(如Employees)并使用DisplayMemberPath =“Description”。 这一切都像预期的那样完美。

因为这个应用程序的目标是与触摸屏一起使用,所以我不得不设置滚动条的样式并使其更宽,这意味着我必须为ScrolViewer创建一个新模板。结果也非常好。

当我不得不为我需要的ComboBox创建一个新的ControlTemplate时,问题出现了,这样我就可以将ScrollViewerControlTemplate添加到ComboBox的ScrollViewer中。我使用Blend为我生成ControlTemplate,然后将ScrollViewerControlTemplate绑定到ComboBox ControlTemplate中的ScrollViewer。

Excelent,唯一的问题是ComboBox在控件的下拉部分显示正确的文本,但控件的ToggleButton部分显示对象类型,即[NameSpace] .Employee。

我尝试更改ContentPresenter但没有取得多大成功。

<ContentPresenter 
                    Content="{TemplateBinding SelectionBoxItem}" 
                    ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" 
                    ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" 
                    Margin="{TemplateBinding Padding}" 
                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在您的ComboBox模板中,该区域的内容应绑定到SelectionBoxItem属性。因此,如果您使用ContentPresenter来显示选择:

<ContentPresenter ContentSource="SelectionBoxItem" />

如果您使用的是ToggleButton的内容区域,则可以执行以下操作:

<ToggleButton Content="{TemplateBinding SelectionBoxItem}"
              ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
              ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" />