Запретить ручную прокрутку ScrollViewer - PullRequest
1 голос
/ 03 ноября 2010

У меня есть ScrollViewer, который оборачивает кучу динамически создаваемых элементов управления TextBox. HorizontalScrollBarVisibility и VerticalScrollBarVisibility оба установлены на Скрытый . Я программно прокручиваю ScrollViewer в ответ на то, что пользователь прокручивает вид сетки.

Проблема, с которой я столкнулся, заключается в том, что, когда пользователь фокусируется на одном из этих элементов TextBox, а затем нажимает клавиши со стрелками влево / вправо, ScrollViewer прокручивается. Я хочу предотвратить эту ручную прокрутку и разрешить только программную прокрутку. Очевидно, что отключение ScrollViewer не вариант, так как пользователь должен иметь возможность добавлять текст в TextBoxes внутри него. Точно так же установка свойства HorizontalScrollBarVisibility на Отключено не работает, так как при этом смещение прокрутки возвращается к нулю.

Как заблокировать прокрутку или предотвратить ручную прокрутку?

1 Ответ

0 голосов
/ 04 ноября 2010

Удаляя ручные операции с полосами прокрутки и скрывая их, вы в основном говорите, что хотите что-то, что имеет список элементов, которые можно прокручивать из кода, но не ListBox ...

Вывод: не используйте ListBox:)

Поскольку вы сами управляете прокруткой, почему бы не использовать родительские элементы TextBox для элемента StackPanel внутри холста (конечно же, с помощью прямоугольника отсечения),Затем используйте свойства Canvas.Top/Left на StackPanel для его прокрутки.

В приведенном ниже примере это делается.Я добавил ползунок, привязанный к свойству 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...