2012-10-08 36 views
0

我使用的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}"> 

我的要求是:当在收集没有int值,然后组合框左侧应显示“ConvId enter image description here”,这是一个字符串。图如下所示

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

回答

0

这个堆栈线程似乎做你想干净利用转换器。 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> 
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> 

希望这会有所帮助。

0

看看John Myczek的WatermarkService。如果在ComboBox中没有选择任何项目,您可以让它显示默认字符串。在我链接到的答案中,ComboBox存在一些问题,但是如果您看得更远,那么可以解决这个问题。