我正在开发 Windows phone 8.1 RT 应用程序。我正在使用组合框。有 20 多个运算符要绑定到组合框。当我们在 Combobox 上进行选项卡时,App 应该以完整模式打开所有 20 个 opetaros。我需要两个不同的模板,当项目以完整模式打开时应该使用一个模板(图像和文本块),当在完整模式项目中选择一个项目时应该使用另一个模板(仅 TextBlock)。继承 DataTemplateSelector 并创建新的 DataTemplateSelector。ItemTemplateSelector 分配有新继承的 DataTemplateSelector。下面是使用的代码。
<ComboBox Grid.Row="3" Grid.Column="0" Margin="15 5 0 0"
ItemsSource="{Binding Operators}" SelectedItem="{Binding SelectedOperator, Mode=TwoWay}"
Style="{StaticResource FullModeComboBoxStyle1}" ItemContainerStyle="{StaticResource FullModeComboBoxItemStyle1}"
VerticalAlignment="Top"
Height="65"
ItemTemplateSelector="{StaticResource ExploreTemplateSelector}"
/>
模板选择器
public class ExploreTemplateSelector : DataTemplateSelector
{
public DataTemplate DropdownItemsTemplate { get; set; }
public DataTemplate SelectedItemTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
var parent = container;
while (parent != null && !(parent is ComboBoxItem) && !(parent is ComboBox))
parent = VisualTreeHelper.GetParent(parent);
var inDropDown = (parent is ComboBoxItem);
return inDropDown
? DropdownItemsTemplate
: SelectedItemTemplate;
}
}
数据模板
<DataTemplate x:Key="OperatorDataTemplate">
<StackPanel Orientation="Horizontal" Margin="5 5 0 0" Height="Auto">
<Image Source="{Binding ImageUri}" Height="35" Width="60" VerticalAlignment="Top" />
<TextBlock Text="{Binding Name}" Style="{StaticResource ComboboxTextBlockStyle}" Margin="5 0 0 0" Width="120" VerticalAlignment="Top" TextWrapping="Wrap"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="SelectedOperatorDataTemplate">
<TextBlock Text="{Binding Name}" Style="{StaticResource ComboboxTextBlockStyle}" Margin="5 0 0 0" Width="120" VerticalAlignment="Top" TextWrapping="Wrap"/>
</DataTemplate>
<class:ExploreTemplateSelector x:Key="ExploreTemplateSelector" DropdownItemsTemplate="{StaticResource SelectedOperatorDataTemplate}"
SelectedItemTemplate="{StaticResource SelectedOperatorDataTemplate}"
/>
当我们点击组合框时,项目没有绑定,显示命名空间列表。但是在完整模式下选择一个项目时,会点击 SelectTemplateCore 并使用 SelectedItemTemplate 显示所选项目。但是绑定数据源时没有命中 SelectTemplateCore。
这段代码有什么问题?为什么 DropDownItemsTemplate 不用于绑定项目?
提前致谢