0

我正在开发 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 不用于绑定项目?

提前致谢

4

1 回答 1

0

因为当您在 xaml 中指定模板选择器时,属性会使用相同的数据模板“SelectedOperatorDataTemplate”进行初始化

于 2016-04-05T17:53:07.177 回答