2013-02-26 61 views
3

我正在構建一個Windows應用商店應用程序,並且由於UI問題,我必須在combobox中實現複選框。我被困在以下問題:我想在「組合框與複選框「。 我想做什麼: http://blogs.microsoft.co.il/blogs/justguy/image_2827F1EB.png使用「帶複選框的組合框」顯示組合框中的選中項目

 <ComboBox x:Name="cb2"    

          DropDownOpened="cb2_DropDownOpened_1"   
          DropDownClosed="cb2_DropDownClosed_1" 
          SelectionChanged="cb2_SelectionChanged_1"        
          Width="310" 
          ItemsSource="{Binding Members}" 
          DisplayMemberPath="{Binding Name}" 
          Height="50" BorderBrush="#FF0A2562" 
          Tag="{Binding index}" 

          > 


         <ComboBox.ItemTemplate> 
         <DataTemplate> 

          <CheckBox 
            Background="Black" 
            BorderBrush="Black" 
           Tag="{RelativeSource TemplatedParent}" 
           Content="{Binding Name}" 
           IsChecked="{Binding Path=IsSelected,Mode=OneWay}" 
           Unchecked="CheckBox_Unchecked_1" 
           Click="CheckBox_Click" 
           /> 
         </DataTemplate> 

        </ComboBox.ItemTemplate>      

       </ComboBox> 

代碼背後:

private void CheckBox_Click(object sender, RoutedEventArgs e) 
    { 

     CheckBox chk = (CheckBox)sender; 


     string k =(string) chk.Content; 

     chkstr.Add(k); 


    } 
private void CheckBox_Unchecked_1(object sender, RoutedEventArgs e) 
    { 
     CheckBox chk = (CheckBox)sender; 
     string k = (string)chk.Content; 

     chkstr.Remove(k); 
     // vl.selectedmembers.Remove(key); 
    } 

回答

0

您需要retemplate的ComboBoxItem。指定ComboBox.ItemContainerStyle而不是ComboBox.ItemTemplate。在ComboBox.ItemContainerStyle內部,爲Template創建一個setter。複製默認模板並添加一個CheckBox。將模板綁定CheckBox.IsChecked設置爲IsSelected,或者使用選定可視狀態中的對象動畫將IsChecked設置爲true。

由於IsSelected是ComboBoxItem容器上的屬性,而不是數據上下文,因此您的方法將無法工作。

+0

感謝Reply.But如何在Combobox中顯示用逗號分隔的選中項目。喜歡這個圖片:[link](http://blogs.microsoft.co.il/blogs/justguy/image_2827F1EB.png) – 2013-02-27 05:20:01

3

在由Microsoft定義的ComboBox標準模板中,在ContentPresenter中添加一個TextBlock。 將TextBlock的Text屬性與string綁定。現在,您可以通過將項目顯式轉換爲字符串來將選中的Items添加到字符串。 @Patrick:ItemTemplate和ItemContainerStyle都可以工作。