我正在制作一个在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
项的滚动条偏移方式?这是错误的方法吗?
答案 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));
}