以编程方式设置滚动条的宽度

3

我有一个应用程序,使用WPF作为工具包框架。现在我想通过编程方式设置我的ScrollViewers的滚动条宽度。我找到了许多通过XAML设置宽度的示例。但是我如何以编程方式定义滚动条的宽度呢?

不幸的是,我找不到任何属性或方法来设置滚动条的宽度。

var viewer = new ScrollViewer();
viewer.MagicProperty = 42; // Does not exist

同时,SystemParameters 上的所有属性都不幸是只读的。

VerticalScrollBarWidth.VerticalScrollBarWidth = 42; // Read-only

编辑:WPF仅是我的应用程序中多个工具包框架之一。我使用自定义GUI抽象层来支持Windows(WPF),Linux(GTK#)和MacOS X(未来)。我的用户界面以独立于操作系统的方式进行封装。因此,使用XAML没有意义。

1个回答

1
最简单的方法是设置x:Name属性,然后您可以在代码中访问ScrollViewer
或者使用绑定:http://www.tutorialspoint.com/wpf/wpf_data_binding.htm 如果您想要操作多个ScrollViewers并设置相同的值,则Binding将非常有用。
编辑: 您可以在代码中创建ScrollViewer,然后设置其参数。但是,您需要一种方法将其插入到其他控件的VisualTree中。因此,您需要获取某个容器的实例,然后使用其Children.Add()方法。
不过,我真的建议尽可能多地使用XAML,并将代码留给应用程序逻辑,而不是UI构建。
编辑2: 您可以尝试:
            Style myStyle = new Style(typeof(ScrollBar));
            myStyle.Setters.Add(new Setter(WidthProperty, 40));

            scrollViewer.Style = myStyle;

编辑3: 我找到了一个解决方案。你可以添加ResourceDictionary.xaml并将此样式添加到其中:

 <Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
        <Setter Property="MinWidth" Value="35" />
        <Setter Property="Width" Value="35" />
    </Style>

然后像这样在运行时加载它:
Resources.MergedDictionaries.Add(Application.LoadComponent(new Uri(@"Dictionary.xaml", UriKind.Relative)) as
                ResourceDictionary);

请问您的“without any XAML”是指什么?我的方法是以编程方式实现的,您只需要指出要更改哪个scrollViewer即可。 - Filip
该链接网站展示了一份基于XAML实例的数据绑定教程。我需要纯粹的C#或VB.NET代码,例如_new ScrollViewer().ScrollBarWith = 42_ 或 _SystemParameters.ScrollBarWith = 42_。当然这两个例子都不起作用。但是我希望它们能够阐明我正在寻找什么内容。 - Martin
我已经拥有所有的ScrollViewer实例,这不是问题。但是我找不到任何设置滚动条宽度的属性或方法。在SystemParameters中,所有属性都是只读的,这很遗憾。如果我知道一种在没有任何XAML文件的情况下使用x:Name的方法,我就不会反对它。 - Martin
我已经扩展了我的问题。我希望你现在能更好地理解我的问题。 - Martin
抛出InvalidOperationException异常:“TargetType 'ScrollBar'”与元素类型“ScrollViewer”不匹配。 - Martin
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接