Я пытаюсь переопределить ширину вертикальной полосы прокрутки для приложения WPF. Добавление следующего кода в словарь ресурсов, на который ссылается App.xaml, приносит пользу:
<sys:Double x:Key = "{x:Static SystemParameters.VerticalScrollBarWidthKey}">50</sys:Double>
Однако мне нужно получить доступ к значению из кода программной части в другом месте приложения, поэтому я хотел бы установить для него константу кода программной части.
public static class MyConstants
{
public static double ScrollBarWidth = 50;
Но как установить для этого значения значение double в xaml? Я пробовал все это без успеха:
<ResourceDictionary xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys = "clr-namespace:System;assembly=mscorlib"
xmlns:constants = "clr-namespace:MyProject">
<sys:Double x:Key = "{x:Static SystemParameters.VerticalScrollBarWidthKey}" Binding = "{x:Static constants:MyConstants.ScrollBarWidth}" />
<sys:Double x:Key = "{x:Static SystemParameters.VerticalScrollBarWidthKey}" Source = "{x:Static constants:MyConstants.ScrollBarWidth}" />
<sys:Double x:Key = "{x:Static SystemParameters.VerticalScrollBarWidthKey}" Value = "{x:Static constants:MyConstants.ScrollBarWidth}" />
@NawedNabiZada На самом деле я не могу установить привязку к полной остановке ресурсов: The property 'Binding' was not found in type 'Double'
. Может быть, мне просто нужно найти волшебное ключевое слово, чтобы присвоить его?
Кажется, это работает для меня
<x:Static x:Key = "{x:Static SystemParameters.VerticalScrollBarWidthKey}" Member = "local:Constants.scrollBarWidth" MemberType = "{x:Type sys:Double}"></x:Static>
x: Расширение статической разметки
Это выглядит многообещающе, но я получаю сообщение об ошибке 'System.Double.constants:MyConstants.ScrollBarWidth' StaticExtension value cannot be resolved to an enumeration, static field, or static property
Как вы объявили свое постоянное свойство?
Вы можете добавить запись в свои ресурсы и получить ее оттуда в коде.
var key = SystemParameters.VerticalScrollBarWidthKey;
Application.Current.Resources[key] = 42d;
Double vsbWidth = (Double)Application.Current.Resources[key];
Console.WriteLine(vsbWidth.ToString());
Если вы хотите переопределить значение в (скажем) области окна, вы можете сделать это. Ресурсы, а не приложение.
Здорово! В моем app.xaml.cs я просто вставил это, и все готово Current.Resources[SystemParameters.VerticalScrollBarWidthKey] = MyConstants.ScrollBarWidth;
Привязки можно выполнять только для свойств.
ScrollBarWidth {get; set;} = 50;
А вот со статическими значениями не уверен. возможно, тебе стоит попробовать