防止手动滚动ScrollViewer

时间:2010-11-03 00:06:10

标签: silverlight silverlight-4.0

我有一个ScrollViewer,它包装了一堆动态创建的TextBox控件。 HorizontalScrollBarVisibilityVerticalScrollBarVisibility都设置为隐藏。我以编程方式滚动ScrollViewer以响应用户滚动网格视图。

我遇到的问题是,当用户将焦点放在其中一个TextBox元素上,然后按左/右箭头键时,ScrollViewer就会滚动。我想阻止这种手动滚动,只允许编程滚动。显然,禁用ScrollViewer不是一个选项,因为用户需要能够在其中的TextBox中添加文本。同样,将HorizontalScrollBarVisibility属性设置为已禁用也不起作用,因为它会将滚动偏移重置为零。

如何锁定滚动或阻止手动滚动?

1 个答案:

答案 0 :(得分:0)

通过删除滚动条的手动操作并隐藏它们,你基本上说你想要的东西有一个项目列表,可以从代码中滚动,但不是ListBox ...

结论:不要使用ListBox:)

当您自己管理滚动时,为什么不在画布内的StackPanel下使用TextBoxes(当然,使用剪切矩形)。然后使用StackPanel上的Canvas.Top/Left属性滚动它。

以下示例就是这样做的。我添加了一个滑块绑定到 Canvas.Top 属性,以便您可以测试它。

Xaml示例:

<UserControl x:Class="SilverlightApplication1.NotAListbox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Canvas Background="Aquamarine" HorizontalAlignment="Center" Name="canvas1" VerticalAlignment="Center" Width="200" Height="200">
            <Canvas.Clip>
                <RectangleGeometry Rect="0,0,200,200"></RectangleGeometry>
            </Canvas.Clip>
            <StackPanel Canvas.Top="{Binding ElementName=slider1, Path=Value}" Name="stackPanel1">
                <TextBox Height="23" Text="textBox 1" Width="120" />
                <TextBox Height="23" Text="textBox 2" Width="120" />
                <TextBox Height="23" Text="textBox 3" Width="120" />
                <TextBox Height="23" Text="textBox 4" Width="120" />
                <TextBox Height="23" Text="textBox 5" Width="120" />
                <TextBox Height="23" Text="textBox 6" Width="120" />
                <TextBox Height="23" Text="textBox 7" Width="120" />
                <TextBox Height="23" Text="textBox 8" Width="120" />
                <TextBox Height="23" Text="textBox 9" Width="120" />
            </StackPanel>
        </Canvas>
        <Slider Height="171" HorizontalAlignment="Center" Margin="316,62,57,66" Name="slider1" VerticalAlignment="Center" Width="27" Orientation="Vertical" Minimum="-223" Maximum="200" />
    </Grid>
</UserControl>