我正在开发一种电子库存软件,它复制了组织者的抽屉,所以我需要模仿这些组织者有X列和Y抽屉的事实。
现在,我正在使用AdaptiveGridView(来自Microsoft.Toolkit.Uwp.UI.Controls),并且我将DesiredWidth绑定到计算值== AdaptiveGridView的大小/数量所需的栏目。
这有效,但有一点需要注意:当我达到AdaptiveGridView接受的最小大小DesiredWidth(大约44)时,列数开始缩小(以适应Windows,这是它的目的,我知道:))
我尝试将AdaptiveGridView的MinWidth修复为44 *列,并且它可以正常工作,但是,我无法看到最右边的列=>它们开始隐藏在窗户的右侧。
我尝试启用水平滚动,将AdaptiveGridView放在Scrollviewer中,但是我无法获取隐藏列以便访问。
那么,你有没有想法:
全部谢谢!
答案 0 :(得分:1)
怎么样?这是......
首先,XAML部分。我将AdaptiveGridView封装在Grid中,将Grid封装在ScrollViewer中。 这里最重要的项目是中间网格。实际上,我将其MinWidth属性绑定到AdaptiveGridView允许的元素的最小大小*我需要的列数,并且我还将其宽度绑定到Scrollviewer的ViewportWidth属性:
<ScrollViewer Name="ScrlV" ZoomMode="Enabled" MaxZoomFactor="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" HorizontalScrollMode="Auto" SizeChanged="ScrlV_SizeChanged">
<Grid MinWidth="{Binding MinGridSize}" Width="{Binding ElementName=ScrlV, Path=ViewportWidth}">
<control:AdaptiveGridView HorizontalAlignment="Stretch" Name="itemsGrid" CanReorderItems="True" CanDragItems="True" ItemsSource="{Binding List}" DesiredWidth="{Binding ReqWidth}" Height="auto" ItemTemplate="{StaticResource DrawerItem}" SelectionChanged="itemsGrid_SelectionChanged" AllowDrop="True" DragItemsCompleted="itemsGrid_DragItemsCompleted" />
</Grid>
</ScrollViewer>
因此,当我更改窗口的大小时,我得到事件并相应地修改我的CurrWidth属性:
private void itemsGrid_SizeChanged(object sender, SizeChangedEventArgs e)
{
Items.CurrWidth = (int)e.NewSize.Width;
}
然后,在后台,MinGridSize&amp;处理ReqWidth值(最小列宽设置为@ 50):
public int CurrWidth
{
get
{
return currwidth;
}
set
{
currwidth = value;
OnPropertyChanged(new PropertyChangedEventArgs("CurrWidth"));
OnPropertyChanged(new PropertyChangedEventArgs("ReqWidth"));
OnPropertyChanged(new PropertyChangedEventArgs("MinGridSize"));
}
}
public int MinGridSize
{
get
{
return 50 * NbrCol;
}
}
public int ReqWidth
{
get
{
double width = 0;
if(NbrCol > 0 && CurrWidth > 0)
{
width = CurrWidth / NbrCol;
}
else
{
width = 50;
}
return (int)Math.Round(width, 0);
}
}
因此,AdaptiveGridView获取其DesiredWidth属性集,并且Grid也设置了MinWidth。
最后,Scrollviewer的宽度是窗口1,内部网格相应地适应Scrollviewer ViewportWidth,但是限制为最小宽度=所需列的数量*列的最小尺寸。每当我改变窗口的宽度时,AdaptiveGridView就会发挥作用,直到达到最小宽度。当它发生时,Grid停止收缩,AdaptiveGridView停止适应,我可以水平滚动以查看缺少的列。
干杯!