我正在使用一个Combobox,其ItemSource是类型的ObservableCollection(即ConversationList)。
<ComboBox x:Name="ConvId"
Grid.Row="2"
Width="75"
Height="23"
Margin="6,94,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemsSource="{Binding ConversationList,
UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedId,
Mode=TwoWay}">
我的要求是:当Collection中没有int值时,Combobox左侧应该显示'ConvId '这是一个字符串。图如下所示
我有解决方法,即将集合从int转换为字符串,并将'ConvId'放在第0个位置并标记SelectedIndex = 0.但它不是我们想要的。 我是否必须使用一些自定义控件。有没有在XAML中实现这一点。
答案 0 :(得分:0)
这个Stack线程似乎可以用转换器干净利落地完成你想做的事情。 How to display default text "--Select Team --" in combo box on pageload in WPF?
我所指的答案始于:
<Grid>
<ComboBox
x:Name="comboBox1"
ItemsSource="{Binding MyItemSource}" />
<TextBlock
Visibility="{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource NullToVisibilityConverter}}"
IsHitTestVisible="False"
Text="... Select Team ..." />
</Grid>
答案 1 :(得分:0)
在你的组合框下方有下面的文本块,并确保组合框和文本块彼此重叠(即它们应该在同一网格行中)
<TextBlock Text="ConvID"
IsHitTestVisible="False">
<TextBlock.Style>
<Style
TargetType="TextBlock">
<Setter
Property="Visibility"
Value="Collapsed" />
<Style.Triggers>
<DataTrigger
Binding="{Binding ConversationList.Count}"
Value="0">
<Setter
Property="Visibility"
Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
希望这有帮助。
答案 2 :(得分:0)
看看John Myczek的WatermarkService。如果在ComboBox中未选择任何项目,则可以显示默认字符串。在我链接的答案中,ComboBox存在一些问题,但如果你进一步向下看,那就有一个修复。