0

我正在使用一个 Combobox,它的 ItemSource 是 ObservableCollection(ie 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 中实现这一点。

4

3 回答 3

0

这个 Stack 线程似乎用转换器干净地做你想做的事。 如何在 WPF 页面加载的组合框中显示默认文本“--Select Team --”?

我所指的答案是从这个开始的:

<Grid>
    <ComboBox
        x:Name="comboBox1"
        ItemsSource="{Binding MyItemSource}"  />
    <TextBlock
        Visibility="{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource NullToVisibilityConverter}}"
        IsHitTestVisible="False"
        Text="... Select Team ..." />
</Grid>
于 2012-10-08T12:38:54.360 回答
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>

希望这可以帮助。

于 2012-10-08T12:46:43.117 回答
0

看看 John Myczek 的WatermarkService。如果在 ComboBox 中未选择任何项目,您可以让它显示默认字符串。在我链接到的答案中,ComboBox 存在一些问题,但是如果您进一步往下看,则可以解决此问题。

于 2012-10-09T06:31:08.360 回答