使用VSM触发器更改GridView项高度

时间:2015-08-05 18:39:15

标签: c# wpf xaml gridview

我目前正在使用WPF应用程序,我有一个GridView显示预先填充的集合中的项目:

<GridView x:Name="GridContainer" ... ItemsSource="{Binding ProfItemCollection}">
      <GridView.ItemTemplate>
          <DataTemplate>
               <local:ProfItem />
          </DataTemplate>
     </GridView.ItemTemplate>         
</GridView>

我还有一个Visual State Manager,它具有基于窗口大小的触发器:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup>
        <VisualState x:Name="NarrowState">
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="300" MinWindowHeight="300"/>
            </VisualState.StateTriggers>
            <VisualState.Setters>
                ...
                ...
            </VisualState.Setters>
        </VisualState>
        ...
        ...
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

我想 从这些视觉状态中更改GridView项目高度 。我在执行此操作时遇到问题...我知道我可以通过在GridView控件中执行以下操作来更改高度:

<GridView.ItemContainerStyle>
    <Style TargetType="GridViewItem">
        <Setter Property="Height" Value="100" />
    </Style>
</GridView.ItemContainerStyle>

但是,我无法弄清楚如何在VisualState Setter中更改此属性值。我在上面的代码中尝试将x:Name属性附加到Setter,但是当我在VisualState Setter中引用此名称时它不起作用。

有没有办法让这个在XAML中工作?

1 个答案:

答案 0 :(得分:2)

我没有使用过VSM,但您是否尝试过声明需要在资源之间切换的各种样式,并将GridView的样式分配给setter中的正确资源?

<!-- In resources section -->
<Style x:Key="smallGVStyle" TargetType="GridViewItem">
    <Setter Property="Height" Value="100" />
</Style>
<Style x:Key="mediumGVStyle" TargetType="GridViewItem">
    <Setter Property="Height" Value="300" />
</Style>

<!-- VSM -->
<VisualStateManager.VisualStateGroups>
    <VisualStateGroup>
        <VisualState x:Name="NarrowState">
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="300" MinWindowHeight="300"/>
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter TargetName="GridContainer" Property="ItemContainerStyle" Value="{StaticResource ResourceKey=smallGVStyle}"/>                ...
            </VisualState.Setters>
        </VisualState>
        ...
        ...
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>