Текст автозаполнения в Silverlight - PullRequest
2 голосов
/ 19 апреля 2010

У меня проблемы с получением окна автозаполнения в System.Windows.Controls.Input работает, как я хочу. Когда я начинаю вводить раскрывающийся раздел, в котором отображается отфильтрованный список, не отображается свойство, к которому я привязываюсь, вместо этого отображается имя класса.

Так, в приведенном ниже примере, когда я набираю свой - вместо того, чтобы показывать «Мое имя», он показывает MyNamespace.Person. Однако, когда я выбираю элемент из списка автозаполнения, он отображает свойство FullName в текстовом поле. Я уверен, что где-то отсутствует простое свойство автозаполнения поля, но я его не вижу.

Пример кода:

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

В своем коде xaml я создаю несколько объектов Person, сохраняю их в списке и связываю этот список с полем автозаполнения

List<Person> people = new List<Person>();
people.Add(new Person { FirstName = "My", LastName = "Name" });
people.Add(new Person { FirstName = "Fernando", LastName = "Torres" });
acbNames.ItemsSource = people;

Мой xaml:

<my:AutoCompleteBox Name="acbNames" ValueMemberPath="FullName" />

/ * после ввода «my» при автоматическом заполнении вместо «My Name» отображается «MyNamespace.Person», но после выбора элемента из списка отображается «My Name» * /

Ответы [ 3 ]

3 голосов
/ 19 апреля 2010

Оказывается, мне нужно использовать ItemTemplate для раскрывающейся части AutoCompleteBox, поэтому xaml для него теперь будет выглядеть следующим образом:

<my:AutoCompleteBox Name="acbNames" ValueMemberBinding="{Binding FullName}">
            <my:AutoCompleteBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding FullName}"/>
                </DataTemplate>
            </my:AutoCompleteBox.ItemTemplate>
        </my:AutoCompleteBox>
2 голосов
/ 12 декабря 2012

Да, ваша проблема была в том, что вы не поместили шаблон элемента. Но если вы поставили шаблон элемента и у вас все еще есть проблема, прочитайте, что написал Сандро.

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

Это стиль, который я использовал:

<Style x:Key="autocomplete" TargetType="sdk1:AutoCompleteBox">
    <Setter Property="Margin" Value="5,0,5,0"/>
    <Setter Property="MinWidth" Value="100"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property ="HorizontalAlignment" Value="Right"/>
</Style>

Если я не использую этот стиль, мой таможенный элемент отображается неправильно, как я настраиваю в DataItem, вместо этого отображается имя класса.

Доля | редактирование

Это работает и для меня, но только когда я применил какой-то собственный стиль темы из инструментария. Существуют и другие обходные пути, когда вы используете тему из набора инструментов

Лучшее

debarisi

1 голос
/ 04 февраля 2011

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

Это стиль, который я использовал:

    <Style x:Key="autocomplete" TargetType="sdk1:AutoCompleteBox">
        <Setter Property="Margin" Value="5,0,5,0"/>
        <Setter Property="MinWidth" Value="100"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property ="HorizontalAlignment" Value="Right"/>
    </Style>

Если я не использую этот стиль, мой таможенный элемент отображается неправильно, как я настраиваю в DataItem, вместо этого он показывает имя класса.

...