Создание прокручиваемого пользовательского элемента управления WPF - PullRequest
1 голос
/ 10 марта 2012

Для приложения, над которым я работаю, я хочу создать пользовательский элемент управления с несколькими кнопками. Если кнопок слишком много, их нужно прокручивать. Однако я не хочу использовать стандартную полосу прокрутки, а просто хочу, чтобы на каждом конце элемента управления были две кнопки: одна для прокрутки вверх, а другая вниз. Каков наилучший способ добиться этого?

Можно ли изменить стиль полосы прокрутки, чтобы они были просто кнопками, а не полностью горизонтальным графическим интерфейсом?

Ответы [ 3 ]

21 голосов
/ 10 марта 2012

Обычно для этого вы используете ScrollViewer .Например:

<UserControl x:Class="WpfApplication2.UserControl1"
             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="200" d:DesignWidth="300">
    <ScrollViewer>
        <StackPanel>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
            <Button Content="Test"/>
        </StackPanel>
    </ScrollViewer>
</UserControl>

При необходимости автоматически отобразит вертикальную полосу прокрутки.

Вы можете изменить поведение, указав VerticalScrollbarVisibility , например,

<ScrollViewer VerticalScrollBarVisibility="Auto">
<ScrollViewer VerticalScrollBarVisibility="Visible">
<ScrollViewer VerticalScrollBarVisibility="Hidden">
<ScrollViewer VerticalScrollBarVisibility="Disabled">

Конечно, есть также свойство HorizontalScrollBarVisibility .

1 голос
/ 10 марта 2012

Способ решения такой проблемы заключается в изучении свойств и методов управления.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <Button Grid.Row="0" Width="40" HorizontalAlignment="Left" Content="Up" Click="clickSVup"/>
    <ScrollViewer x:Name="svBtn" Grid.Row="1" Width="100" HorizontalAlignment="Left" 
                  VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden">
        <StackPanel>
            <TextBlock Text="Text 01"/>
            <TextBlock Text="Text 02"/>
            <TextBlock Text="Text 03"/>
            <TextBlock Text="Text 04"/>
            <TextBlock Text="Text 05"/>
            <TextBlock Text="Text 06"/>
            <TextBlock Text="Text 07"/>
            <TextBlock Text="Text 08"/>
            <TextBlock Text="Text 09"/>
            <TextBlock Text="Text 10"/>
            <TextBlock Text="Text 11"/>
            <TextBlock Text="Text 12"/>
            <TextBlock Text="Text 13"/>
            <TextBlock Text="Text 14"/>
            <TextBlock Text="Text 15"/>
            <TextBlock Text="Text 16"/>
            <TextBlock Text="Text 17"/>
            <TextBlock Text="Text 18"/>
            <TextBlock Text="Text 19"/>
        </StackPanel>
    </ScrollViewer>
    <Button Grid.Row="2" Width="40" HorizontalAlignment="Left" Content="Down" Click="clickSVdn"/>
</Grid>



    private void clickSVdn(object sender, RoutedEventArgs e)
    {
        svBtn.PageDown();
    }

    private void clickSVup(object sender, RoutedEventArgs e)
    {
        svBtn.PageUp();
    }
0 голосов
/ 10 марта 2012

Я бы посоветовал вам использовать стандартную полосу прокрутки Windows вместо использования некоторых пользовательских кнопок для прокрутки вверх и прокрутки вниз.Пользователи очень привыкли к этому в целях прокрутки.Если вы используете две кнопки, вам придется отображать что-то еще, например, прогресс прокрутки.Не изобретай велосипед:)

...