我目前正在使用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中工作?
答案 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>