C# Scrollviewer外部的WPF元素忽略ZIndex
如果有一个元素在WPF scrollviewer的边界之外进行了转换,那么我似乎无法在顶部渲染它 考虑以下示例:C# Scrollviewer外部的WPF元素忽略ZIndex,c#,wpf,scrollviewer,C#,Wpf,Scrollviewer,如果有一个元素在WPF scrollviewer的边界之外进行了转换,那么我似乎无法在顶部渲染它 考虑以下示例: <Window x:Class="ScrollViewerContentTransform.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Window x:Class="ScrollViewerContentTransform.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="Blue" Panel.ZIndex="1"/>
<ScrollViewer Grid.Row="1" Panel.ZIndex="2">
<Grid>
<Border Width="30" Height="30" Background="Red">
<Border.RenderTransform>
<TranslateTransform Y="-80"/>
</Border.RenderTransform>
</Border>
</Grid>
</ScrollViewer>
</Grid>
</Window>
即使我设置了zorder,红色边框仍将隐藏在蓝色边框下
如果我用网格替换ScrollViewer,它将根据需要显示。关于如何在使用ScrollViewer时让元素显示在顶部的任何提示?据我所知,使用ScrollViewer时不可能删除内容剪辑,因为ScrollViewer控件模板将生成一个
ScrollContentPresenter
,它反过来又具有GetLayoutClip
方法的以下实现:
protected override Geometry GetLayoutClip(Size layoutSlotSize) {
return new RectangleGeometry(new Rect(base.RenderSize));
}
这个类是密封的,所以你不能从它派生来重写这个方法。
因此,考虑从布局中删除ScReVIEWER。 <代码>边框 >您在另一行上,因此,它将永远不会与
ScrollViewer
在视觉上重叠,除非在模板中的某个地方,您已将网格行的ClipToBounds
设置为false。如果我使用Grid
切换ScrollViewer
,我会得到我想要的视觉结果。我猜也有一个解决方案可以用于ScrollViewer
。谢谢DmitryG,我想你是对的。我必须找到一个解决办法。