组合框的默认值不是选择

时间:2011-09-13 21:22:35

标签: wpf combobox default-value

有没有办法在WPF中的ComboBox中有一个默认值? 我不希望这个值成为我列表中的内容。

有没有办法将值赋值给索引-1,然后它可以使它成为默认值。

我该如何处理?

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

您不能将默认值分配给Selected属性,因为djacobson说,但是,您始终可以使用索引0作为默认值,然后添加集合的其余部分。如果这不是您要查找的内容,您可以更改ComboBox的值,使其获取您希望放置的默认值,并添加一个按钮或CheckBox,以便用户可以使用默认值重置为ComboBox。

我认为这是使用.net中目前可用的工具执行此操作的最简单方法

答案 1 :(得分:0)

添加功能相对简单,您可以继承控件。设置SelectedItem = null会改变selectedIndexselectedValue,因为您需要付费。

然后您还可以访问Text属性,直接设置组合框的默认文本。

// sample code snippet
public NewDropDown()
{
    this.SelectionChanged += NewDropDown_SelectionChanged;
    this.Loaded += NewDropDown_Loaded;
}

void NewDropDown_SelectionChanged( object sender, SelectionChangedEventArgs e )
{
    if ( e.AddedItems.Count == 0 && this.SelectedItem == null )
    {
        this.Text = "Please Select..";
    }
}

这将在没有选定值时设置文本。它不会在列表中显示为可选选项,为了解决这个问题,你可以在列表中注入null作为值(如@DanJ所说)或者我已经在controltemplate中添加了一个按钮组合框。

虽然我没有真正查看它并且看不到ItemsSourceChanged事件,但它们可能是控件中的一个事件,它可以让你在每个组合框中注入null,从而节省了ViewModel中的麻烦。 / p>

答案 2 :(得分:0)

我通过修改ComboBox模板为自己解决了这个问题。

模板包含<ContentPresenter x:Name="ContentPresenter" .. >在CBox按钮上显示SelectedItem字符串,如果SelectedIndex为-1 =未选择任何内容= CBox默认值,则不包含任何内容。 您可以添加另一个ContentPresenter,其中不同的名称,内容绑定到CBox'Text'属性,Visibility设置为'Hidden'。 然后添加将隐藏标准Presenter的Trigger,并显示默认文本Presenter,如果SelectedIndex为-1。

<ContentPresenter x:Name="ContentPresenter"
    Content="{TemplateBinding SelectionBoxItem}" />

<ContentPresenter x:Name="DefaultTextContentPresenter"
    Content="{TemplateBinding Text}"  
    Visibility="Hidden" />

<ControlTemplate.Triggers>
    <Trigger Property="SelectedIndex" Value="-1">
        <Setter TargetName="ContentPresenter" Property="Visibility" Value="Hidden"/>
        <Setter TargetName="ContentPresenter_DefaultText" Property="Visibility" 
            Value="Visible"/>
    </Trigger>
</ControlTemplate.Triggers>

然后只需将CBox Text值设置为默认文本即可。您当然可以将默认文本Presenter绑定或设置为您喜欢的任何值或属性 这在我看来比较容易,然后继承Cbox并添加代码 这种方法也适用于很多其他情况。