2016-04-22 95 views
1

我想添加一个VisualState触发器到ListView,但它没有被触发。这是最有效的方式,因为ListView中的项目数量有时可能大于300+。如何在UWP中的ListView中插入VisualState触发器?

当宽度变小时,触发器试图重新定位网格。

我当前的代码:

<Page.Resources> 
    <DataTemplate x:Key="mainDataTemplate"> 
     <Grid Padding="15" BorderBrush="Aqua" BorderThickness="1" Margin="6"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 

      <VisualStateManager.VisualStateGroups> 
       <VisualStateGroup> 
        <VisualState x:Name="mobileView"> 
         <VisualState.Setters> 
          <Setter Target="TitleDescGrid.(Grid.Row)" Value="1" /> 
          <Setter Target="TitleDescGrid.(Grid.Column)" Value="0" /> 
          <Setter Target="TitleDescGrid.(Grid.ColumnSpan)" Value="2" /> 
          <Setter Target="PosterGrid.Background" Value="Pink" /> 
         </VisualState.Setters> 
         <VisualState.StateTriggers> 
          <AdaptiveTrigger MinWindowWidth="500" /> 
         </VisualState.StateTriggers> 
        </VisualState> 
       </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 

      <Grid x:Name="PosterGrid" Grid.Column="0" Grid.Row="0" Margin="3,10,3,3" 
            Height="400" Width="180" DataContext="{Binding}" Background="SaddleBrown" 
            SizeChanged="PosterGrid_SizeChanged"> 
       <TextBlock Text="{Binding}" /> 
      </Grid> 
      <Grid x:Name="TitleDescGrid" Grid.Row="0" Grid.Column="1" 
            SizeChanged="TitleDescGrid_SizeChanged" 
            Background="DarkCyan" DataContext="{Binding}" 
            Width="420" Margin="5,14,5,5" > 
       <TextBlock Text="{Binding}" /> 
      </Grid> 
      <Grid x:Name="RatingsGrid" Grid.Row="0" 
            DataContext="{Binding}" 
            Grid.Column="2" 
            Background="Olive" 
            Width="200" Margin="5,15,0,0" > 
       <TextBlock Text="{Binding}" /> 
      </Grid> 
     </Grid> 
    </DataTemplate> 
</Page.Resources> 

而且里面我已经得到了其中的ListView声明

<StackPanel x:Name="ParentSP"> 
    <ListView x:Name="movieListview" Margin="8,0,8,8" 
       Grid.Row="0" 
       ItemTemplate="{StaticResource mainDataTemplate}" 
       SizeChanged="movieListview_SizeChanged"> 
     <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Center"/> 
       <Setter Property="VerticalContentAlignment" Value="Center"/> 
      </Style> 
     </ListView.ItemContainerStyle> 
    </ListView> 
</StackPanel> 

回答

4

尝试包裹DataTemplate中的内容为用户控件的部分。

所以

<Page.Resources> 
    <DataTemplate x:Key="mainDataTemplate"> 
     <UserControl> 
      <Grid Padding="15" BorderBrush="Aqua" BorderThickness="1" Margin="6"> 
+0

由于原来如此! – AbsoluteSith

+0

请你解释一下,为什么我要包装它? – LaoR