UWP 偏移 GridView 滚动条
UWP Offset GridView Scrollbar
我正在制作一个在标题元素后面滚动的 Gridview(它是半反式parent 以显示在其后面滚动的项目)。为此,我将包含标题的 Grid
和 GridView
分层,将它们都作为 children 放在同一个 Grid
.
中
<Grid>
<GridView>
<!-- Stuff -->
<GridView>
<Grid Height="100">
<!-- Title Content here -->
</Grid>
</Grid>
这工作正常,但会导致 GridView
显示最初位于标题后面的元素。为了解决这个问题,我在 GridView
:
中偏移了 ItemsWrapGrid
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Name="ItemsWrapGrid"
Margin="0,100,0,0"
Orientation="Horizontal"
HorizontalAlignment="Center"></ItemsWrapGrid>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
现在项目开始时好像在标题内容下方,并在其下方滚动。
唯一剩下的问题是 GridView
的滚动条。滚动条仍然位于 parent Grid
的顶部,这意味着它位于标题后面,即使 GridView
中的项目本身开始于标题下方。当 GridView
(行)中有足够多的项目导致滚动条足够小以至于完全位于标题后面时,这尤其是一个问题。
有没有办法像 GridView
项目那样偏移滚动条?这是错误的做法吗?
UWP Offset GridView Scrollbar
根据您的要求,您可以使用 VisualTreeHelper
获取 VerticalScrollBar
元素,然后在 GridView 加载事件处理程序中设置 Margin = 0,100,0,0
。详细步骤请参考以下代码
public static DependencyObject MyFindGridViewChildByName(DependencyObject parant, string ControlName)
{
int count = VisualTreeHelper.GetChildrenCount(parant);
for (int i = 0; i < count; i++)
{
var MyChild = VisualTreeHelper.GetChild(parant, i);
if (MyChild is FrameworkElement && ((FrameworkElement)MyChild).Name == ControlName)
return MyChild;
var FindResult = MyFindGridViewChildByName(MyChild, ControlName);
if (FindResult != null)
return FindResult;
}
return null;
}
private void TestGridView_Loaded(object sender, RoutedEventArgs e)
{
var scrollBar = MyFindGridViewChildByName(TestGridView, "VerticalScrollBar");
scrollBar.SetValue(MarginProperty, new Thickness(0, 100, 0, 0));
}
我正在制作一个在标题元素后面滚动的 Gridview(它是半反式parent 以显示在其后面滚动的项目)。为此,我将包含标题的 Grid
和 GridView
分层,将它们都作为 children 放在同一个 Grid
.
<Grid>
<GridView>
<!-- Stuff -->
<GridView>
<Grid Height="100">
<!-- Title Content here -->
</Grid>
</Grid>
这工作正常,但会导致 GridView
显示最初位于标题后面的元素。为了解决这个问题,我在 GridView
:
ItemsWrapGrid
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Name="ItemsWrapGrid"
Margin="0,100,0,0"
Orientation="Horizontal"
HorizontalAlignment="Center"></ItemsWrapGrid>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
现在项目开始时好像在标题内容下方,并在其下方滚动。
唯一剩下的问题是 GridView
的滚动条。滚动条仍然位于 parent Grid
的顶部,这意味着它位于标题后面,即使 GridView
中的项目本身开始于标题下方。当 GridView
(行)中有足够多的项目导致滚动条足够小以至于完全位于标题后面时,这尤其是一个问题。
有没有办法像 GridView
项目那样偏移滚动条?这是错误的做法吗?
UWP Offset GridView Scrollbar
根据您的要求,您可以使用 VisualTreeHelper
获取 VerticalScrollBar
元素,然后在 GridView 加载事件处理程序中设置 Margin = 0,100,0,0
。详细步骤请参考以下代码
public static DependencyObject MyFindGridViewChildByName(DependencyObject parant, string ControlName)
{
int count = VisualTreeHelper.GetChildrenCount(parant);
for (int i = 0; i < count; i++)
{
var MyChild = VisualTreeHelper.GetChild(parant, i);
if (MyChild is FrameworkElement && ((FrameworkElement)MyChild).Name == ControlName)
return MyChild;
var FindResult = MyFindGridViewChildByName(MyChild, ControlName);
if (FindResult != null)
return FindResult;
}
return null;
}
private void TestGridView_Loaded(object sender, RoutedEventArgs e)
{
var scrollBar = MyFindGridViewChildByName(TestGridView, "VerticalScrollBar");
scrollBar.SetValue(MarginProperty, new Thickness(0, 100, 0, 0));
}