【问题标题】:How to insert a VisualState Trigger inside a ListView in UWP?如何在 UWP 的 ListView 中插入 VisualState 触发器?
【发布时间】:2016-04-22 19:47:38
【问题描述】:

我正在尝试将 VisualState 触发器添加到 Listview,但它没有被触发。这是最有效的方法吗,因为 ListView 中的项目数量有时可能超过 300 个。

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

我当前的代码:

<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>

【问题讨论】:

    标签: xaml winrt-xaml win-universal-app windows-10


    【解决方案1】:

    尝试将 DataTemplate 的内容包装到 UserControl 中。

    所以

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

    【讨论】:

    • 你能解释一下,为什么我必须把它包起来吗?
    猜你喜欢
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多