【发布时间】:2011-06-22 16:17:08
【问题描述】:
尝试对此进行一些搜索,但找不到我需要的确切内容。我想要一个带有硬编码项目的组合框,但包含一个默认字符串。例如:
--选择项目--
项目1
项目2
项目3
我不希望 --Select Item-- 出现在列表中,只出现在组合框本身上。 我也不希望这个值是可编辑的。
谢谢。
【问题讨论】:
-
这不是默认值,而是
null的表示形式。
尝试对此进行一些搜索,但找不到我需要的确切内容。我想要一个带有硬编码项目的组合框,但包含一个默认字符串。例如:
--选择项目--
项目1
项目2
项目3
我不希望 --Select Item-- 出现在列表中,只出现在组合框本身上。 我也不希望这个值是可编辑的。
谢谢。
【问题讨论】:
null的表示形式。
您可以覆盖默认模板并在其中包含一个 TextBlock,该文本块仅在 SelectedItem 为 null 时可见(为此使用带有 datatrigger 的样式)。要获取默认模板,您可以修改check MSDN(Default WPF Themes 链接)。
【讨论】:
为此,您必须扩展组合框类并添加此额外的基本功能。我首先编写一个接受默认值的方法,然后编写一个新方法来检索排除默认项目的项目列表。
您可能还想在选择默认值时处理返回 NULL,以及可能考虑调整选定项目的选定索引以考虑在列表中有一个额外的项目,例如
【讨论】:
我认为最简单的方法是使用简单的样式:
<ComboBox>
<ComboBox.Style>
<Style TargetType="ComboBox">
<Setter Property="IsEditable" Value="True" />
<Setter Property="IsReadOnly" Value="True" />
<Style.Triggers>
<Trigger Property="SelectedIndex" Value="-1">
<Setter Property="Text" Value="-- Select Item --" />
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
设置 IsEditable="True" 会启用 ComboBox 上的 Text 属性。为了保证Text属性不能被编辑,还需要IsReadOnly="True"。
【讨论】: