【问题标题】:Stretch GridViewItem to full GridView width将 GridViewItem 拉伸到完整的 GridView 宽度
【发布时间】:2016-03-13 13:21:22
【问题描述】:

我正在开发适用于 Windows 10 的计划应用程序并使用 GridView 来显示课程卡片。当窗口很宽时它们应该有固定宽度,当窗口很窄时它们应该使用完整的 GridView 宽度(实际上应该看起来像 ListView)。

我正在使用 VisualStateManager 在 Wide 状态下设置固定的 GridViewItem 宽度,但我不明白如何使其伸展。

这是我的风格:

    <Style x:Key="GridViewItemStyle" TargetType="GridViewItem">
        <Setter Property="Margin" Value="10, 10, 10, 10" />
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="VerticalContentAlignment" Value="Stretch" />
    </Style>

    <Style x:Key="NarrowGridViewItemStyle" BasedOn="{StaticResource ResourceKey=GridViewItemStyle}" TargetType="GridViewItem">
        <Setter Property="Width" Value="{Binding ActualWidth, ElementName=TimetableGrid}" />
    </Style>

    <Style x:Key="WideGridViewItemStyle" BasedOn="{StaticResource ResourceKey=GridViewItemStyle}" TargetType="GridViewItem">
        <Setter Property="Width" Value="450"/>
    </Style>

视觉状态:

    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="AdaptiveStates" CurrentStateChanged="AdaptiveStates_OnCurrentStateChanged">
            <VisualState x:Name="NarrowState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="0" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="TimetableGrid.ItemContainerStyle" Value="{StaticResource ResourceKey=NarrowGridViewItemStyle}" />
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="WideState">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="600"/>
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="NavigationSplitView.DisplayMode" Value="CompactOverlay"/>
                    <Setter Target="HamburgerButton.Background" Value="#3F51B5"/>
                    <Setter Target="HamburgerButton.Foreground" Value="White"/>
                    <Setter Target="HeaderBorder.Margin" Value="20,0,0,0"/>
                    <Setter Target="TimetableGrid.ItemContainerStyle" Value="{StaticResource ResourceKey=WideGridViewItemStyle}" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

还有 GridView 本身:

 <GridView x:Name="TimetableGrid"
        Margin="20, 0, 20, 10"
        ItemTemplate="{StaticResource LessonTemplate}"
        ItemsSource="{Binding Source={StaticResource TimetableViewSource}}">
    <GridView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate x:DataType="data:Day">
                    <TextBlock Style="{ThemeResource TitleTextBlockStyle}" Margin="0, 20, 0, 0">
                       <Run Text="{Binding DayOfWeek}" />
                       <Run Text=", " />
                       <Run Text="{Binding Date}" />
                    </TextBlock>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </GridView.GroupStyle>
</GridView>

实际结果:

宽状态:

窄态:

我是 UWP 开发和 XAML 的新手,感谢任何帮助。谢谢。

【问题讨论】:

    标签: windows xaml gridview win-universal-app visualstatemanager


    【解决方案1】:

    您需要替换 ItemsPanelTemplate 才能拉伸项目。

    尝试在Page.Resources 中定义一个新资源:

    <ItemsPanelTemplate x:Key="NarrowItemsPanelTemplate">
        <ItemsStackPanel />
    </ItemsPanelTemplate>
    

    然后修改您的VisualStateManager,为NarrowState额外设置ItemsPanel属性:

    <VisualState x:Name="NarrowState">
        <VisualState.StateTriggers>
            <AdaptiveTrigger MinWindowWidth="0" />
        </VisualState.StateTriggers>
        <VisualState.Setters>
            <Setter Target="TimetableGrid.ItemContainerStyle" 
                Value="{StaticResource ResourceKey=NarrowGridViewItemStyle}" />
            <Setter Target="TimetableGrid.ItemsPanel" 
                Value="{StaticResource ResourceKey=NarrowItemsPanelTemplate}" />
        </VisualState.Setters>
    </VisualState>
    

    无需以任何方式修改WideState。

    【讨论】:

    • 像魅力一样工作。谢谢。 :)
    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 2018-05-26
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多