Xaml UWP偏移网格视图滚动条
我正在制作一个Gridview,它在标题元素后面滚动,标题元素是半透明的,用于显示在标题元素后面滚动的项目。为此,我将包含标题和GridView的网格分层,将它们作为子网格放置在同一个网格中 现在,项目开始时就好像它们位于标题内容下方,并在标题内容下方滚动 唯一剩下的问题是GridView的滚动条。滚动条仍然位于父网格的顶部,这意味着它位于标题后面,即使GridView中的项目本身从标题下面开始。当GridView行中有足够多的项目导致滚动条足够小,以至于它完全位于标题后面时,这尤其是一个问题 是否有类似于GridView项目的方法来偏移滚动条?这是错误的方法吗 UWP偏移网格视图滚动条 根据您的需求,可以使用VisualTreeHelper获取VerticalScrollBar元素,然后在GridView加载事件处理程序中设置Margin=0100,0,0。有关详细步骤,请参考以下代码Xaml UWP偏移网格视图滚动条,xaml,gridview,uwp,scrollbar,Xaml,Gridview,Uwp,Scrollbar,我正在制作一个Gridview,它在标题元素后面滚动,标题元素是半透明的,用于显示在标题元素后面滚动的项目。为此,我将包含标题和GridView的网格分层,将它们作为子网格放置在同一个网格中 现在,项目开始时就好像它们位于标题内容下方,并在标题内容下方滚动 唯一剩下的问题是GridView的滚动条。滚动条仍然位于父网格的顶部,这意味着它位于标题后面,即使GridView中的项目本身从标题下面开始。当GridView行中有足够多的项目导致滚动条足够小,以至于它完全位于标题后面时,这尤其是一个问题
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));
}