我已经查找到一些内容,但目前在具有两个列的组合框中卡住了。我有可用的xaml主题,组合框“样式”已定义并且像预期的那样正常工作,因此这部分是可以的。
现在,我需要一个组合框来显示两个值,可以将其视为显示下拉列表中的州缩写和州名称,这些值来自于DataTable.DefaultView绑定源。
如果我有
<my:cboStates TextSearch.TextPath="StateAbbrev">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" TextSearch.Text="{Binding Path=StateAbbrev}">
<TextBlock Text="{Binding Path=StateAbbrev}"/>
<TextBlock Text="{Binding Path=FullStateName}" Margin="10 0"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</my:cboStates>
这个可以正常工作。 现在,我的困境是...我想在5个不同的表单上使用相同的功能,并且所有的内容都显示相同,如果有变化(不是这个,而是其他多列组合框),我不想直接将其放到表单的XAML文件中。
我希望将其放入主题的资源字典文件中,然后一遍又一遍地重复使用那个“样式”。 这是有道理的。 但是,当我这样做时,如果绑定到数据表,则只得到以下结果,尝试将其作为样式:下拉菜单显示的值为
System.Data.DataRowView
System.Data.DataRowView
System.Data.DataRowView
System.Data.DataRowView
而不是实际的两列。 这是我在“主题”资源字典中拥有的内容。
<DataTemplate x:Key="myStateComboTemplate" >
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=StateAbbrev}"/>
<TextBlock Text="{Binding Path=FullStateName}"/>
</StackPanel>
</DataTemplate>
<Style x:Key="StyleMyStatesCombobox" TargetType="{x:Type ComboBox}"
BasedOn="{StaticResource MyOtherWorkingComboBoxStyle}" >
<Setter Property="TextSearch.TextPath" Value="{Binding Path=StateAbbrev}" />
<Setter Property="ItemTemplate" Value="{StaticResource myStateComboTemplate}" />
</Style>
如果我在表单上创建了两个 "cboStates" 类的实例,并将其中一个设置为首先列出的显式样式,第二个基于 "Style" 设置,那么第二个将失败,仅显示重复的 System.Data.DataRowView 条目,而不是实际的数据内容。
我错过了什么?
因此,为了澄清我的要求...
状态... ex dataAL Alabama
AK Alaska
AZ Arizona
AR Arkansas
CA California
CO Colorado
CT Connecticut
DE Delaware
我希望下拉列表框能显示缩写的州名,例如:AL、AK、AZ等,并且这个下拉列表框应该更窄。这也将是“SelectedValue”返回的值。
实际的下拉列表将会按照上述列出的方式呈现数据,同时显示州的缩写和全名。
所需下拉列表框的示例如下图所示:
Dictionary<string, string>
呢?将Key
绑定到一个TextBlock
,将Value
绑定到另一个TextBlock
?或者可能有超过两行的情况吗? - Bob.