【问题标题】:set default string name on combobox在组合框上设置默认字符串名称
【发布时间】:2012-10-08 12:16:34
【问题描述】:

我正在使用一个 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 中实现这一点。

【问题讨论】:

    标签: wpf xaml combobox wpf-controls


    【解决方案1】:

    这个 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>
    

    【讨论】:

      【解决方案2】:

      在您的组合框下方有下面的文本块,并确保组合框和文本块相互重叠(即它们应该在同一网格行中)

      <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>
      

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-14
          • 1970-01-01
          • 2013-01-13
          • 1970-01-01
          • 2011-10-11
          • 1970-01-01
          相关资源
          最近更新 更多