2015-01-28 3 views
0

У меня есть ComboBox, который использует ItemTemplate, состоящий из CheckBox и TextBlock. Моя цель состоит в том, что когда элементы проверены/сняты флажки, свернутое поле со списком отображает список отмеченных элементов, разделенных запятыми. Я думал, что свойство Text для ComboBox можно использовать для этой цели, но это разрешено только тогда, когда IsEditable = true, в противном случае он просто пуст, даже если привязан к свойству. Я не хочу, чтобы комбо было доступно для редактирования.WPF ComboBox Текстовое свойство blank с ItemTemplate

Было бы неплохо, если бы я мог предоставить какой-то простой шаблон для отображения свойства, состоящего из отмеченных элементов из списка. Это возможно?

<ComboBox ItemsSource="{Binding Issues}" Text="{Binding IssuesCSV}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" Margin="4 0 4 0" 
          IsEnabled="{Binding IsEnabled}" /> 
       <TextBlock Text="{Binding Issue.Number}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

попробовать здесь http://www.codeproject.com/ Статьи/45782/A-WPF-Combo-Box-with-Multiple-Selection, это может дать направление – stsur

ответ

0

Ваше желаемое поведение отличается от ComboBox, что вы можете захотеть создать собственный пользовательский элемент управления.

... Но я думаю, что это способ получить то, что вы хотите от ComboBox

Во-первых, создать визуала ресурс и привязать его к вашему значению IssuesCSV:

<Window.Resources> 
    <VisualBrush x:Key="TextBrush" TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left"> 
     <VisualBrush.Visual> 
      <TextBlock Text="{Binding IssuesCSV}"/> 
     </VisualBrush.Visual> 
    </VisualBrush> 
</Window.Resources> 

Тогда установите фоновое свойство вашего ComboBox, чтобы использовать эту кисть ресурс:

<ComboBox ... Background="{StaticResource TextBrush}" ... /> 

Затем установите ComboBox быть редактируемым, но г Свинец-только. Это позволит сохранить стиль в нередактируемом ComboBox серебра по умолчанию от прикрывая текст во время падения вниз: (Вы можете также, вероятно, играть со стилем ComboBox, чтобы достичь этого при сохранении ComboBox действительно нередактируемое)

<ComboBox ... IsReadOnly="True" IsEditable="True" ... /> 

Наконец, запретить пользователю возможность фактически выбрать ComboBoxItem, предоставляя обработчик для события SelectionChanged, который просто устанавливает SelectedItem обратно в нуль:

<ComboBox ... SelectionChanged="myCB_SelectionChanged" ... /> 

private void myCB_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    myCB.SelectedItem = null; 
}