有没有办法在WPF中的ComboBox中有一个默认值? 我不希望这个值成为我列表中的内容。
有没有办法将值赋值给索引-1,然后它可以使它成为默认值。
我该如何处理?
感谢您的帮助
答案 0 :(得分:0)
您不能将默认值分配给Selected属性,因为djacobson说,但是,您始终可以使用索引0作为默认值,然后添加集合的其余部分。如果这不是您要查找的内容,您可以更改ComboBox的值,使其获取您希望放置的默认值,并添加一个按钮或CheckBox,以便用户可以使用默认值重置为ComboBox。
我认为这是使用.net中目前可用的工具执行此操作的最简单方法
答案 1 :(得分:0)
添加功能相对简单,您可以继承控件。设置SelectedItem = null
会改变selectedIndex
和selectedValue
,因为您需要付费。
然后您还可以访问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并添加代码 这种方法也适用于很多其他情况。