【发布时间】:2019-01-21 19:20:44
【问题描述】:
我正在开发一个 UWP Twitter 应用程序,我正在使用 VisualStateManager 根据应用程序窗口的宽度更改布局(主要用于平板电脑和移动设备支持)。
我对此进行了一些阅读,听起来HorizontalAlignment="Stretch" 是我需要将 GridView 的大小调整为包含它的 ListViewItem 父级的宽度。
但是,这并没有发生。在调试时查看实时 XAML 视图,我的 ListView 和 ListViewItem 占据了应用程序窗口的整个宽度,但 GridView 不是。它的大小取决于它包含的内容。
下面是我的 XAML 页面:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="mobile">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="bladeView.BladeMode" Value="Fullscreen" />
<Setter Target="lstFeed.HorizontalAlignment" Value="Stretch"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="desktop">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="640" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="bladeView.BladeMode" Value="Normal" />
<Setter Target="bldHome.Width" Value="430"/>
<Setter Target="lstFeed.Width" Value="430"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ct:BladeView x:Name="bladeView" BladeClosed="UnloadBlade">
<ct:BladeItem x:Name="bldHome" Tag="blade-00" IsOpen="True" TitleBarVisibility="Collapsed" BorderThickness="0" Style="{StaticResource BladeStyle}" Margin="0 28 0 0">
<ListView x:Name="lstFeed" VerticalAlignment="Top" Padding="0 0 0 0"
SelectionChanged="LoadBlade" ItemTemplate="{StaticResource TweetTemplate}" />
</ct:BladeItem>
</ct:BladeView>
</Grid>
以及来自我的 DataTemplate 的相关 XAML:
<Style x:Key="BladeStyle" TargetType="ct:BladeItem">
<Setter Property="Width" Value="430"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="BorderThickness" Value="0"/>
</Style>
<Style x:Key="ListItemStyle" TargetType="Grid">
<Setter Property="Width" Value="400" />
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="MinHeight" Value="50" />
</Style>
<Style x:Key="MetaButtons" TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="FontFamily" Value="{StaticResource FontAwesome}"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
</Style>
<DataTemplate x:Key="TweetTemplate" x:DataType="tweeter:Tweet2">
<Grid Style="{StaticResource ListItemStyle}" Tag="{x:Bind Path=Tweet.Id}" x:Name="grdTweets" HorizontalAlignment="Stretch">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="mobile">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="bladeView.BladeMode" Value="Fullscreen" />
<Setter Target="grdTweets.HorizontalAlignment" Value="Stretch" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="desktop">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="640" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="bladeView.BladeMode" Value="Normal" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.RowDefinitions>
编辑
所以我刚刚找到ListViewItem的HorizontalContentAlignment属性,但是由于我的ListViewItems是在我设置ListView的ItemsSource时动态创建的,所以我不确定如何设置这个属性。
在哪里可以设置?
正在发生的事情的屏幕截图:
【问题讨论】: