在VisualStateManager(WinRT XAML)中更改ItemTemplate中控件的属性

在VisualStateManager(WinRT XAML)中更改ItemTemplate中控件的属性,xaml,windows-runtime,winrt-xaml,visualstatemanager,Xaml,Windows Runtime,Winrt Xaml,Visualstatemanager,我有用于SnapView和纵向视图的ListView。但是,我想在这两个视图中更改项目模板的某些项目。VisualStateManager似乎是执行此操作的理想场所,但我想不出来 以下是我的ListView XAML: <ListView x:Name="SampleListView" ItemsSource="{Binding Samples}" Visibility="Collapsed"> <ListView.ItemTemplate> &l

我有用于SnapView和纵向视图的ListView。但是,我想在这两个视图中更改项目模板的某些项目。VisualStateManager似乎是执行此操作的理想场所,但我想不出来

以下是我的ListView XAML:

<ListView x:Name="SampleListView" ItemsSource="{Binding Samples}" Visibility="Collapsed">
    <ListView.ItemTemplate>
        <DataTemplate>
            <local:SampleBlock SampleText="{Binding ElementName=pageRoot, Path=DataContext.SampleText, Mode=TwoWay}"
                Height="70" Width="Auto" Margin="5" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我想使用页面的VisualStateManager更改SampleBlock控件的高度和边距。以下是显示和隐藏我的ListView的可视状态管理器:

<VisualState x:Name="FullScreenPortrait">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SampleListView" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SampleGridView" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

<VisualState x:Name="Snapped">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SampleListView" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SampleGridView" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>


有没有办法从页面的VisualStateManager访问项目模板,或者我应该从另一个角度对此进行攻击?

您不能更改DataTemplate的属性,但可以将ListView的实际项目模板更改为用于快照视图的特定模板

<VisualState x:Name="Snapped">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="itemListView" Storyboard.TargetProperty="ItemTemplate">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource SnappedListViewItemTemplate}"/>
        </ObjectAnimationUsingKeyFrames>                        
    </Storyboard>
</VisualState>


太棒了,谢谢。我花了一点时间来研究如何制作DataTemplates资源,但一旦完成,这就非常有效。这会导致我的应用程序崩溃,所以要小心。