UWP偏移GridView滚动条

时间:2019-05-06 20:19:54

标签: xaml gridview uwp scrollbar

我正在制作一个在title元素后面滚动的Gridview(它是半透明的,以显示在其后面滚动的项目)。为此,我将包含标题和Grid的{​​{1}}分层放置在同一个GridView中,将它们作为子元素放置。

Grid

这很好用,但是使<Grid> <GridView> <!-- Stuff --> <GridView> <Grid Height="100"> <!-- Title Content here --> </Grid> </Grid> 最初显示在标题后面的元素。为了解决这个问题,我在GridView中偏移了ItemsWrapGrid

GridView

现在,项目开始时就好像它们位于标题内容下方,并在其下方滚动。

唯一剩下的问题是<GridView.ItemsPanel> <ItemsPanelTemplate> <ItemsWrapGrid Name="ItemsWrapGrid" Margin="0,100,0,0" Orientation="Horizontal" HorizontalAlignment="Center"></ItemsWrapGrid> </ItemsPanelTemplate> </GridView.ItemsPanel> 的滚动条。滚动条仍会移至父级GridView的顶部,这意味着滚动条仍位于标题的后面,即使Grid中的项目本身在标题下方也是如此。当GridView(行)中有足够的项目导致滚动条足够小而完全位于标题后面时,这尤其是个问题。

是否有一种类似于GridView项的滚动条偏移方式?这是错误的方法吗?

1 个答案:

答案 0 :(得分:1)

  

UWP偏移GridView滚动条

根据您的要求,可以使用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));

}