1

我有一种情况,ScrollViewer在基类 ( Window) 中设置并且我的用户控件被动态添加为窗口的内容。现在,我希望将ToolBar用户控件中的一个控件 ( ) 排除在滚动之外(以保持在顶部可见)。我知道类上有一个属性HandlesScrollingControl但它是内部的。我无法将工具栏放在外面,ScrollViewer因为我无权访问它。有没有办法做到这一点?

4

1 回答 1

1

我能想到的唯一方法是让你的控件大小自己到外部ScrollViewer,然后有自己的内部ScrollViewer来处理滚动。下面有一些示例代码,但关键是将Height您的控件绑定到ActualHeight外部控件,ScrollerViewer如下所示:Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type ScrollViewer}}}"

外滚动查看器:

<ScrollViewer>
    <ListBox:HandlesItsOwnScrolling />
</ScrollViewer>

您的控制:

<UserControl x:Class="ListBox.HandlesItsOwnScrolling"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300" Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type ScrollViewer}}}" >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button Grid.Row="0">Toolbar</Button>
        <ScrollViewer Grid.Row="1">
            <Border Background="AliceBlue" Height="1000" />
        </ScrollViewer>
    </Grid>
</UserControl>
于 2012-11-06T15:14:47.493 回答