2017-01-24 2 views
0

У меня есть следующий код, позволяющий пользователям выбирать несколько элементов из выпадающего списка. Однако, когда они нажимают на один элемент, он делает это отображаемым текстом, когда combobox закрывается. Могу ли я изменить отображаемый текст на то, что не только выбранный элемент. Например, если пользователи выбирают элементы A, B и D, я хочу текстовую часть выпадающего списка, чтобы показать «A, B, D»Изменение отображаемого текста в XAML Combobox multi selection

<ComboBox ItemsSource="{Binding ListOfItems}"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Width="20" /> 
         <TextBlock Text="{Binding DisplayName}" Width="110" /> 
        </StackPanel> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 

Благодаря

ответ

1

Вы можете использовать ContentControl со стилем который изменяет свойство ContentTemplate для выбранного элемента. Следующий образец разметки должен дать вам эту идею.

<ComboBox ItemsSource="{Binding ListOfItems}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <ContentControl Content="{Binding}"> 
       <ContentControl.Style> 
        <Style TargetType="ContentControl"> 
         <Setter Property="ContentTemplate"> 
          <Setter.Value> 
           <!-- the template for the items in the dropdown list --> 
           <DataTemplate> 
            <StackPanel Orientation="Horizontal"> 
             <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Width="20" /> 
             <TextBlock Text="{Binding DisplayName}" Width="110" /> 
            </StackPanel> 
           </DataTemplate> 
          </Setter.Value> 
         </Setter> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ComboBoxItem}}" Value="{x:Null}"> 
           <Setter Property="ContentTemplate"> 
            <Setter.Value> 
             <!-- the template for the selected item--> 
             <DataTemplate> 
              <ItemsControl ItemsSource="{Binding ItemsSource, RelativeSource={RelativeSource AncestorType=ComboBox}}"> 
               <ItemsControl.ItemsPanel> 
                <ItemsPanelTemplate> 
                 <WrapPanel /> 
                </ItemsPanelTemplate> 
               </ItemsControl.ItemsPanel> 
               <ItemsControl.ItemTemplate> 
                <DataTemplate> 
                 <TextBlock Text="{Binding DisplayName}" Margin="0 0 5 0"/> 
                </DataTemplate> 
               </ItemsControl.ItemTemplate> 
              </ItemsControl> 
             </DataTemplate> 
            </Setter.Value> 
           </Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </ContentControl.Style> 
      </ContentControl> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Для получения дополнительной информации, пожалуйста, обратитесь к следующему аналогичному вопросу.

Can I use a different Template for the selected item in a WPF ComboBox than for the items in the dropdown part?

+0

Благодарим за это. Но я хочу знать, как мне привязать свойство, которое не является выбранным элементом. У меня есть 2 свойства - список элементов, который отображается в раскрывающемся списке, но затем свойство строки, которое объединяет все выбранные элементы, и я хочу, чтобы это показано вместо выбранного элемента. – Danhol86

+1

В результате я использовал RelativeSource для привязки к значению из контекста данных - Danhol86

Смежные вопросы