如何从XAML代码更改ItemsPanelTemplate WrapGrid?

Mat*_*Sot 6 c# xaml windows-8

我正在尝试修改我的WrapGrid的MaximumRowsOrColumns属性,如下所示:

<GridView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapGrid x:Name="wrapGridItems" Orientation="Vertical" MaximumRowsOrColumns="1" />
    </ItemsPanelTemplate>
</GridView.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)

然后我使用此代码更改WrapGrid:

<VisualState x:Name="Snapped">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="wrapGridItems" Storyboard.TargetProperty="MaximumRowsOrColumns">
            <DiscreteObjectKeyFrame KeyTime="0" Value="-1"/>
        </ObjectAnimationUsingKeyFrames>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="headerText" Storyboard.TargetProperty="Text">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Pins"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误

WinRT信息:无法解析TargetName wrapGridItems.

我应该如何在ObjectAnimationUsingKeyFrames Storyboard.TargetName属性中引用WrapGrid?

Den*_*nis 4

您无法使用 x:Name 访问模板内的元素。由于模板可以被实例化多次,动画将无法判断它应该操作哪个元素。

如果您需要更改模板内元素的属性,您应该使用绑定:

<GridView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapGrid Orientation="Vertical" MaximumRowsOrColumns="{Binding MyMaxRowsOrCollumns}" />
    </ItemsPanelTemplate>
</GridView.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)