【问题标题】:Autocompletebox text in SilverlightSilverlight 中的自动完成框文本
【发布时间】:2010-04-19 06:28:46
【问题描述】:

我无法让 System.Windows.Controls.Input 中的自动完成框按我的意愿工作。当我开始键入显示过滤列表的下拉部分时,它不显示我绑定到的属性,而是显示类名。

所以在下面的示例中,当我输入 my - 而不是显示“我的姓名”时,它显示的是 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;

我的xml:

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

/* 输入'my'后,自动补全显示'MyNamespace.Person'而不是'My Name',但从列表中选择项目后显示'My Name' */

【问题讨论】:

    标签: silverlight autocompletebox


    【解决方案1】:

    事实证明,我需要为 AutoCompleteBox 的下拉部分使用 ItemTemplate,因此它的 xaml 现在如下所示:

    <my:AutoCompleteBox Name="acbNames" ValueMemberBinding="{Binding FullName}">
                <my:AutoCompleteBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding FullName}"/>
                    </DataTemplate>
                </my:AutoCompleteBox.ItemTemplate>
            </my:AutoCompleteBox>
    

    【讨论】:

    • 我还发现,如果我提供自己的 ToString() 实现或使用 TypeConverter,我也可以解决这个问题。
    【解决方案2】:

    是的,您的问题是因为您没有放置项目模板。 但是,如果您放置项目模板并仍然遇到问题,请阅读 Sandro 所写的内容。

    我有同样的问题。我使用控件样式的静态资源解决了它

    这是我使用的样式:

    <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 中配置的那样正确显示,而是显示类名称。

    分享|编辑

    这也适用于我,但仅当我从工具包中应用了一些自定义主题样式时。 当您使用工具包中的主题时,还有一些其他解决方法

    最好的,

    去巴里西

    【讨论】:

      【解决方案3】:

      我有同样的问题。我使用控件样式的静态资源解决了它

      这是我使用的样式:

          <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 中配置的那样正确显示,而是显示类名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 2010-09-22
        • 2011-08-17
        • 2012-06-05
        相关资源
        最近更新 更多