0

如果我有一个元素在 WPF 滚动查看器的范围之外进行了转换,我似乎无法将它呈现在顶部。

考虑以下示例:

<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,红色边框仍将隐藏在蓝色边框下。

http://imm.io/Sm2Q

如果我用 Grid 替换 ScrollViewer,这将根据需要显示。关于在使用 ScrollViewer 时如何让元素显示在顶部的任何提示?

4

1 回答 1

1

据我所知,在使用 ScrollViewer 时是无法移除内容剪辑的,因为 ScrollViewer 控件模板会生成一个,而该模板ScrollContentPresenter又具有以下GetLayoutClip方法的实现:

protected override Geometry GetLayoutClip(Size layoutSlotSize) {
    return new RectangleGeometry(new Rect(base.RenderSize));
}

这个类是Sealed所以你不能从它派生来覆盖这个方法。因此,请考虑从您的布局中删除 ScrollViewer。

于 2013-01-10T14:24:48.883 回答