2011-06-22 123 views
1

试图做一些这方面的搜索,但无法找到我所需要的。我想要一个带硬编码项目的组合框,但包含一个默认字符串。例如:设置组合框的默认值

- 选择Item--

项目1

项目2

项目3

我不想--Select Item--,在列表中出现,只有在组合框本身上。 另外我不希望这个值是可编辑的。

谢谢。

+1

这不是默认值,而是'null'的表示。 –

回答

2

你可以如果SelectedItemnull(使用带有datatrigger的样式),则覆盖默认模板并在其中包含TextBlock。要获得默认模板,您可以修改check MSDNDefault WPF Themes链接)。

+0

我选择走这条路。谢谢。 – ecMode

1

要做到这一点,你必须扩展组合框类,并添加额外的资金。我首先编写一个接受默认值的方法,然后编写一个新方法来检索排除默认项目的项目列表。

你也可以选择默认值时,处理返回NULL,也可能寻找到调整所选项目的选定索引以说明其在列表中的一个额外的项目,例如

+1

更改控件的行为应该是最后的手段,当然在WPF中。 –

1

我认为这样做最简单的方法是用一个简单的风格:

<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 =“真”能够在组合框的Text属性。为了确保Text属性不能被编辑,IsReadOnly =“True”也是必需的。