0

Windows Phone 8.1 RT アプリを開発しています。コンボボックスを使用しています。Combbox にバインドする Operator は 20 以上あります。コンボボックスにタブを付けると、アプリは 20 個すべての opetaros をフル モードで開く必要があります。2 つの異なるテンプレートが必要です。アイテムがフル モードで開かれるときは 1 つのテンプレート (画像とテキスト ブロック) を使用し、フル モード アイテムの中からアイテムが選択されるときは別のテンプレート (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 を使用して選択されたアイテムが表示されます。ただし、Datasource をバインドするときに SelectTemplateCore はヒットしません。

このコードの問題は何ですか? アイテムのバインドに DropDownItemsTemplate が使用されないのはなぜですか?

前もって感謝します

4

1 に答える 1

0

xaml でテンプレート セレクターを指定すると、プロパティは同じデータ テンプレート「SelectedOperatorDataTemplate」で初期化されるためです。

于 2016-04-05T17:53:07.177 に答える