C# Scrollviewer外部的WPF元素忽略ZIndex

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"

如果有一个元素在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"
    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,我想你是对的。我必须找到一个解决办法。