0

水平方向にスクロールできるページを持つ FlipView があります。各ページには、ItemsControl を持つ ScrollViewer (垂直スクロール) が保持されます。itemsControl は、行である itemTemplate を保持します (各ページはデータ行を保持します)。

I want to change the template of a row at some button click. 現在、行のタイプは 1 つですが、別の 2 つのタイプを実装したいのですが、方法がわかりません... 基本的に、現在の行のタイプは DataTemplate を介して定義されており、別の 2 つの DataTemplates を定義し、dataTemplate を ItemsControl にバインドしたいと考えています。アイテムテンプレート

<ItemsControl x:Name="RowItemsControl" ItemsSource="{Binding OptionItems, Mode=OneWay}" Visibility="{Binding OptionsPageVisibility}">
      <ItemsControl.ItemTemplate>
           <DataTemplate x:Name="RowType1">
               <Grid x:Name="OptionItemGrid" Background="White" HorizontalAlignment="Stretch">
                     <Grid.RowDefinitions>
                          <RowDefinition Height="Auto"/>
                          <RowDefinition Height="Auto"/>
                          <RowDefinition Height="Auto"/>
                          <RowDefinition Height="Auto"/>
                      </Grid.RowDefinitions>
                      <Grid.ColumnDefinitions>
                          <ColumnDefinition Width="*" />
                          <ColumnDefinition Width="*" />
                          <ColumnDefinition Width="*" />
                          <ColumnDefinition Width="*" />
                          <ColumnDefinition Width="*" />
                       </Grid.ColumnDefinitions>
                              <!-- here is the content of the rowType1 -->                  
                 </Grid>
             </DataTemplate>
            <!--<DataTemplate x:Name="RowType2">  --- I want just 1 of these 3 data to be my item template
            </DataTemplate x:Name="RowType2">
            <DataTemplate x:Name="RowType3">
            </DataTemplate x:Name="RowType3"> -->
        </ItemsControl.ItemTemplate>
   </ItemsControl>
4

1 に答える 1

6

DataTemplate最初に、セクションでオブジェクトを定義する必要がありますResources... を使用しても問題ありませんItemsControl.Resources:

<ItemsControl x:Name="RowItemsControl" ItemsSource="{Binding OptionItems, Mode=OneWay}" Visibility="{Binding OptionsPageVisibility}">
      <ItemsControl.Resources>
           <DataTemplate x:Name="RowType1">
               <Grid x:Name="OptionItemGrid" Background="White" HorizontalAlignment="Stretch">
                     <Grid.RowDefinitions>
                          <RowDefinition Height="Auto"/>
                          <RowDefinition Height="Auto"/>
                          <RowDefinition Height="Auto"/>
                          <RowDefinition Height="Auto"/>
                      </Grid.RowDefinitions>
                      <Grid.ColumnDefinitions>
                          <ColumnDefinition Width="*" />
                          <ColumnDefinition Width="*" />
                          <ColumnDefinition Width="*" />
                          <ColumnDefinition Width="*" />
                          <ColumnDefinition Width="*" />
                       </Grid.ColumnDefinitions>
                 </Grid>
             </DataTemplate>
            <DataTemplate x:Name="RowType2">
                ...
            </DataTemplate x:Name="RowType2">
            <DataTemplate x:Name="RowType3">
                ...
            </DataTemplate x:Name="RowType3">
        </ItemsControl.Resources>
   </ItemsControl>

Resources次に、おそらくButton.Clickハンドラーでからこれにアクセスして設定する必要があります。

private void Button_Click(object sender, RoutedEventArgs e)
{
    DataTemplate rowType2DataTemplate = RowItemsControl.FindResource("RowType2") as 
        DataTemplate;
    if (rowType2DataTemplate != null) RowItemsControl.ItemTemplate = 
        rowType2DataTemplate;
}

これでうまくいくはずです...何か問題があればお知らせください。

于 2013-10-22T11:11:01.420 に答える