WPF: динамическое изменение ScrollBarWidth в коде позади - PullRequest
0 голосов
/ 30 марта 2019

Как я могу установить ширину полосы прокрутки приложения шириной от кода позади? В этом посте я нашел несколько примеров ( Как увеличить ширину полосы прокрутки в WPF ScrollViewer? ), но только в XAML, а не динамически.

Для меня важно то, что я могу изменять ширину полосы прокрутки во время работы программы. Поэтому, что бы я ни делал, должно быть возможно обновлять значение снова и снова.

<Style TargetType="{x:Type ScrollBar}">
<Setter Property="Stylus.IsFlicksEnabled" Value="True" />
<Style.Triggers>
    <Trigger Property="Orientation" Value="Horizontal">
        <Setter Property="Height" Value="40" />
        <Setter Property="MinHeight" Value="40" />
    </Trigger>
    <Trigger Property="Orientation" Value="Vertical">
        <Setter Property="Width" Value="40" />
        <Setter Property="MinWidth" Value="40" />
    </Trigger>
</Style.Triggers>

или

<Application
xmlns:sys="clr-namespace:System;assembly=mscorlib"
...
>
<Application.Resources>
    <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">50</sys:Double>
    <sys:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">50</sys:Double>
</Application.Resources>

1 Ответ

0 голосов
/ 31 марта 2019

Может быть, этот подход поможет вам: он использует DataBinding (что должно быть в WPF) и дает вам возможность изменить ширину в codebehind.

XAML

<ScrollViewer>
        <ScrollViewer.Resources>
            <Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
                <Setter Property="Width" Value="{Binding MyWidth,Mode=OneWay}" />
            </Style>
        </ScrollViewer.Resources>
</ScrollViewer>

CodeBehind

    public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private double myWidth;
    public double MyWidth
    {
        get { return myWidth; }
        set 
        {
            if (value != this.myWidth)
            {
                myWidth = value; 
                NotifyPropertyChanged("MyWidth");
            }
        }
    }

    public MainWindow()
    {
        InitializeComponent();

        this.DataContext = this;

        //set the width here in code behind
        this.MyWidth = 200;
    }

    protected virtual void NotifyPropertyChanged(String propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

Не забудьте реализовать INotifyPropertyChanged - интерфейс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...