我想动态调整列表视图/项目的宽度。 因此,当用户更改应用程序的屏幕大小时,Listview会自动调整到完美的大小。 目前我正在使用自适应触发器,但我必须为我想要支持的每个可能的大小专门定义值。
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1000"></AdaptiveTrigger>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="textBlockOne.(RelativePanel.Width)" Value="130" />
</VisualState.Setters>
我可以在代码隐藏中访问和操作的每个其他元素。 甚至可以访问ListView标头。 因此,如果某人有一个用于访问ListView DataTemplate中的值的解决方案,那将是非常好的。
这样的事情会很棒:
<ListView x:Name="testList">
<ListView.Header>
<StackPanel x:Name="TestListHeaderStackPanel">
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate x:Name="DataTemplatedata">
<Grid x:Name="GridTest">
.....
</Grid>
</DataTemplate>
<ListView.ItemTemplate>
<ListView>
private void OnPageSizeChanged(object sender, SizeChangedEventArgs args)
{
GridTest.ColumnDefinitions[1].Width=20;
}
答案 0 :(得分:0)
我可以在代码隐藏中访问和操作的每个其他元素。甚至可以访问ListView标头。因此,如果某人有一个用于访问ListView DataTemplate中的值的解决方案,那将是非常好的。
要读取DataTemplate的值是可能的,但是根据DataTemplate Value更改已呈现的ListView的值将是一个问题。并且不建议这样做。
作为一种解决方法,您可以使用数据绑定来更改内部Width
的{{1}}。您可以将Grid
绑定到ViewModel对象的属性(假设为Grid.Width
):
GridWidth
并更改<StackPanel VerticalAlignment="Center">
<ListView Name="lvImgs">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding GridWidth}">
<Image Source="{Binding ImageSource}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button Name="btnChange" Click="btnChange_Click">Click Me to change Item Size</Button>
</StackPanel>
事件中的GridWidth
:
CoreWindow.SizeChanged
这是Window.Current.CoreWindow.SizeChanged += CoreWindow_SizeChanged;
private void CoreWindow_SizeChanged(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.WindowSizeChangedEventArgs args)
{
var widnowWidth = args.Size.Width;
foreach (Model item in lvImgs.Items)
{
item.GridWidth = 500;
}
}
类:
Model
这是完整的演示:DynamicListViewSample。