我无法按照自己的意愿在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;
我的xaml:
<my:AutoCompleteBox Name="acbNames" ValueMemberPath="FullName" />
输入'my'后输入/ *,自动完成显示'MyNamespace.Person'而不是'我的名字',但在从列表中选择项目后显示'我的名字'* /
答案 0 :(得分:3)
事实证明我需要在AutoCompleteBox的下拉部分使用ItemTemplate,因此它的xaml现在如下:
<my:AutoCompleteBox Name="acbNames" ValueMemberBinding="{Binding FullName}">
<my:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FullName}"/>
</DataTemplate>
</my:AutoCompleteBox.ItemTemplate>
</my:AutoCompleteBox>
答案 1 :(得分: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中配置时无法正确显示,而是显示类名称。
份额|修改
这也适用于我,但仅当我从工具包应用了一些自定义主题样式时。 当您使用工具包中的主题
时,还有一些其他解决方法最佳,
debarisi
答案 2 :(得分:1)
我有同样的问题。我使用控件样式的静态资源解决了它
这是我使用的风格:
<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中配置时无法正确显示,而是显示类名称。