在组合框上设置默认字符串名称

时间:2012-10-08 12:16:35

标签: wpf xaml combobox wpf-controls

我正在使用一个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 enter image description here'这是一个字符串。图如下所示

我有解决方法,即将集合从int转换为字符串,并将'ConvId'放在第0个位置并标记SelectedIndex = 0.但它不是我们想要的。 我是否必须使用一些自定义控件。有没有在XAML中实现这一点。

3 个答案:

答案 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存在一些问题,但如果你进一步向下看,那就有一个修复。