【问题标题】:How to change ItemsPanelTemplate WrapGrid From XAML code?如何从 XAML 代码更改 ItemsPanelTemplate WrapGrid?
【发布时间】:2012-10-13 02:24:24
【问题描述】:

我正在尝试像这样修改 WrapGrid 的 MaximumRowsOrColumns 属性:

<GridView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapGrid x:Name="wrapGridItems" Orientation="Vertical" MaximumRowsOrColumns="1" />
    </ItemsPanelTemplate>
</GridView.ItemsPanel>

然后我使用此代码更改 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>

但我得到了错误

WinRT 信息:无法解析 TargetName wrapGridItems。

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

【问题讨论】:

    标签: c# xaml windows-8


    【解决方案1】:

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

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

    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapGrid Orientation="Vertical" MaximumRowsOrColumns="{Binding MyMaxRowsOrCollumns}" />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
    

    【讨论】:

      【解决方案2】:

      设计代码:

      <GridView >
      
      <GridView.ItemsPanel>
                                  <ItemsPanelTemplate>
                                      <WrapGrid x:Name="wrapGrid" Orientation="Vertical"   MaximumRowsOrColumns="{Binding MyMaxRowsOrCollumns}"></WrapGrid>
                                  </ItemsPanelTemplate>
                              </GridView.ItemsPanel>
      </GridView >
      

      C#代码:

      创建依赖属性

      public int MyMaxRowsOrCollumns
          {
              get { return (int)GetValue(MyMaxRowsOrCollumnsProperty); }
              set { SetValue(MyMaxRowsOrCollumnsProperty, value); }
          }
      
          // Using a DependencyProperty as the backing store for MyMaxRowsOrCollumns.  This enables animation, styling, binding, etc...
          public static readonly DependencyProperty MyMaxRowsOrCollumnsProperty =
              DependencyProperty.Register("MyMaxRowsOrCollumns", typeof(int), typeof(DashBord), new PropertyMetadata(2));
      

      【讨论】:

        猜你喜欢
        • 2017-11-17
        • 2012-06-19
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-23
        • 2019-02-07
        • 2012-07-15
        相关资源
        最近更新 更多