2009-09-23 101 views
3

我有一個組合框在我建立了一個ItemTemplate,看起來是這樣的:顯示所選擇的項目不同的組合框

<ComboBox.ItemTemplate> 
    <DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding Piece.NoPiece}" Width="50" /> 
     <TextBlock Text="{Binding Piece.Description}" Width="170" /> 
     <TextBlock Text="{Binding Piece.Categorie.NomCategorie}" /> 
    </StackPanel> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

正如你所看到的,我有三列,讓用戶看到不同一點信息。但是,我希望組合中的選定項目僅顯示第二列。換句話說,有沒有一種方法可以使您在向下滾動時以及在關閉時顯示項目的方式顯示項目,並且您只能看到選擇內容?

+0

對此有什麼好運?我的解決方案適合你嗎? – 2009-09-23 16:14:47

+0

這不完全是我要找的。當我選擇一個項目時,當組合框關閉時,細節仍然顯示。但是,當我重新打開列表以找到另一個答案時,它確實隱藏了詳細信息。 這個背後的想法是,我希望用戶只有在組合框顯示爲「文本框」時纔會看到第二列,但是當我打開它時,我將能夠看到詳細信息。 如果這是不可能的,那就OK了。這是一個'很高興'的功能,而不是必需品。 – 2009-09-23 19:10:56

+1

我已經更新了我的答案,以顯示如何做你想做的。 – 2009-09-24 09:28:53

回答

7

你可以用觸發器做:

<ComboBox.ItemTemplate> 
    <DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding Piece.NoPiece}" Width="50" x:Name="Column1" /> 
     <TextBlock Text="{Binding Piece.Description}" Width="170" /> 
     <TextBlock Text="{Binding Piece.Categorie.NomCategorie}" x:Name="Column3" /> 
    </StackPanel> 
    <DataTemplate.Triggers> 
     <!-- This trigger fires for the selected item in the drop-down list --> 
     <DataTrigger Binding="{Binding 
         RelativeSource={RelativeSource Mode=FindAncestor, 
                 AncestorType=ComboBoxItem}, 
         Path=IsSelected}" 
     Value="True"> 
     <Setter TargetName="Column1" Property="Visibility" Value="Hidden" /> 
     <Setter TargetName="Column3" Property="Visibility" Value="Hidden" /> 
     </DataTrigger> 

     <!-- This trigger fires for the selected item (ie the one that's 
      visible when the popup is closed --> 
     <DataTrigger Binding="{Binding 
         RelativeSource={RelativeSource Mode=FindAncestor, 
                 AncestorType=ComboBoxItem}}" 
        Value="{x:Null}"> 
     <Setter TargetName="Column1" Property="Visibility" Value="Hidden" /> 
     <Setter TargetName="Column3" Property="Visibility" Value="Hidden" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

編輯

當彈出窗口崩潰(我我已經更新了XAML顯示如何替代格式應用到所選項目我不確定那個區域叫什麼。)

訣竅是下拉區域中的項目包含在邏輯樹中的ComboBoxItem對象中。 RelativeSource綁定查找該類型的對象作爲祖先。

  • 如果它發現它,它假設該項目是在樹(並檢查是否它選中)
  • 如果它沒有找到(null),那麼它假設該項目是在組合框中面積,而不是彈出式菜單

如果你在另一個組合框的項目模板中有一個組合框,它會崩潰。我不認爲我想要使用那個用戶界面!

+0

但是,這會產生一個綁定異常:'無法找到與引用綁定的源'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.ComboBoxItem',AncestorLevel ='1'''。我認爲設置ItemTemplateSelector是一個更好的方法。這裏是一個例子:http://social.msdn.microsoft.com/Forums/vstudio/en-US/0467c9ca-efb2-4506-96e7-08ce3356860a/combobox-one-template-for-se- selected-item-one-for -the-下拉列表?論壇= WPF – 2014-05-02 20:30:09