Xaml UWP偏移网格视图滚动条

Xaml UWP偏移网格视图滚动条,xaml,gridview,uwp,scrollbar,Xaml,Gridview,Uwp,Scrollbar,我正在制作一个Gridview,它在标题元素后面滚动,标题元素是半透明的,用于显示在标题元素后面滚动的项目。为此,我将包含标题和GridView的网格分层,将它们作为子网格放置在同一个网格中 现在,项目开始时就好像它们位于标题内容下方,并在标题内容下方滚动 唯一剩下的问题是GridView的滚动条。滚动条仍然位于父网格的顶部,这意味着它位于标题后面,即使GridView中的项目本身从标题下面开始。当GridView行中有足够多的项目导致滚动条足够小,以至于它完全位于标题后面时,这尤其是一个问题

我正在制作一个Gridview,它在标题元素后面滚动,标题元素是半透明的,用于显示在标题元素后面滚动的项目。为此,我将包含标题和GridView的网格分层,将它们作为子网格放置在同一个网格中

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

唯一剩下的问题是GridView的滚动条。滚动条仍然位于父网格的顶部,这意味着它位于标题后面,即使GridView中的项目本身从标题下面开始。当GridView行中有足够多的项目导致滚动条足够小,以至于它完全位于标题后面时,这尤其是一个问题

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

UWP偏移网格视图滚动条

根据您的需求,可以使用VisualTreeHelper获取VerticalScrollBar元素,然后在GridView加载事件处理程序中设置Margin=0100,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.ItemsPanel>
    <ItemsPanelTemplate>
        <ItemsWrapGrid Name="ItemsWrapGrid"
                       Margin="0,100,0,0"
                       Orientation="Horizontal"
                       HorizontalAlignment="Center"></ItemsWrapGrid>
    </ItemsPanelTemplate>
</GridView.ItemsPanel>
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));

}