动态Listview调整大小

时间:2016-09-15 15:35:12

标签: c# uwp uwp-xaml

我想动态调整列表视图/项目的宽度。 因此,当用户更改应用程序的屏幕大小时,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;
    }

1 个答案:

答案 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