我对WPF很陌生。我有一个问题与组合框
<ComboBox Grid.Column="2" Grid.Row="5" x:Name="ddlLocation" ItemsSource="{Binding Users.Locations}" Text="<None Selected>" IsEditable="True" IsReadOnly="True" SelectedValue="{Binding Users.SelectedUser.Location}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="Name" />
<Binding Path="ShortName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
<!--<ComboBox.SelectionBoxItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="Name" />
<Binding Path="ShortName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ComboBox.SelectionBoxItemTemplate>-->
</ComboBox>
如果我这样做,我将在选择框中获得typename。似乎我应该能够使用SelectionBoxItemTemplate,但它告诉我SelectionBoxItemTemplate没有一个可访问的setter。你会怎么做呢?
看起来这是有IsEditable="True"
的结果,我建议删除,因为你也有IsReadOnly="True"
关于Text
属性-当没有选择时的默认值…我只是把这个放在那里,但我希望有人有一个更好的解决方案…我在网上快速浏览了一下,什么也没看到。
包含命名空间
xmlns:conv="clr-namespace:StackOverflow.Converters"
一些xaml <ComboBox ... IsEditable="{Binding SelectedItem, RelativeSource={RelativeSource Self}, Converter={StaticResource NullBoolConverter}, FallbackValue=False}">
<ComboBox.Resources>
<conv:NullBoolConverter x:Key="NullBoolConverter" />
</ComboBox.Resources>
转换器类
namespace StackOverflow.Converters
{
class NullBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value == null;
}
....
}
}