Установите TextSearch. Текст для WPF-ComboBoxItem через DataTemplate

Я думаю с новым циклом foreach, маркировка может быть действительно ясной.

, Например:

sentence: for(Sentence sentence: paragraph) {
  for(String word: sentence) {
    // do something
    if(isDone()) {
      continue sentence;
    }
  }
}

я думаю, что взгляды действительно очищают при наличии Вашей маркировки то же как Вашу переменную в новом для - каждый. На самом деле возможно, Java должен быть злым и добавить неявные маркировки для - каждый переменные heh

6
задан Simon D. 10 July 2009 в 15:59
поделиться

2 ответа

То, что окружает вашу панель, является контейнером по умолчанию. Вам необходимо применить к контейнеру свойство TextSearch.Text. Вы должны иметь возможность сделать это, установив свойство через ItemContainerStyle следующим образом:

<ComboBox.ItemContainerStyle>
    <Style TargetType="{x:Type ComboBoxItem}">
        <Setter Property="TextSearch.Text">
            <Setter.Value>
                <MultiBinding StringFormat="{} {0} {1}">
                    <Binding Path="FirstName"/>
                    <Binding Path="LastName"/>
                </MultiBinding>
            </Setter.Value>
        </Setter>
    </Style>
</ComboBox.ItemContainerStyle>
1
ответ дан 10 December 2019 в 02:52
поделиться

Краткий ответ: то, что вы хотите сделать, нельзя сделать непосредственно в XAML, но есть другие способы сделать это.

Длинный ответ: ComboBox ищет свойство TextSearch.Text напрямую для элементов данных, хранящихся в коллекции Items или ItemsSource. Следовательно, вы не можете установить свойство в шаблоне данных или стиле, потому что они применяются к объектам, используемым для отображения элементов данных, а не к самим элементам данных.

В частности, если вы посмотрите примеры на TextSearch class , вы увидите, что они прикрепляют свойство TextSearch.Text к объектам Image, которые входят в коллекцию ComboBox.Items. Вы можете сделать это в своей программе, сделав Person объектом DependencyObject, но я не думаю, что вы хотите устанавливать свойство для каждого отдельного объекта, подобного этому.

У вас есть несколько вариантов здесь:

Если вы можете изменить класс Person, вы можете либо определить метод ToString () для возврата текста для автозаполнения, либо определить произвольное свойство, такое как Fullname, и установить Textsearch.TextPath в ComboBox. Например:

public class Person
{
     string FirstName { get; set; }
     string LastName {get; set; }
     string FullName { get { return String.Format("{0} {1}", FirstName, LastName); } }
}

и

<ComboBox TextSearch.TextPath="FullName" ItemsSource="collectionOfPersons"/>

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

8
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: