如何在后面的代码中将XAML资源值设置为常量

时间:2019-05-24 04:28:17

标签: .net wpf xaml

我正在尝试覆盖WPF应用程序的垂直滚动条的宽度。将以下代码添加到App.xaml引用的资源字典中可以有效:

<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">50</sys:Double>

但是,我需要从应用程序其他地方的代码隐藏位置访问该值,因此我想将此值设置为代码隐藏常量。

public static class MyConstants
{
    public static double ScrollBarWidth = 50;

但是如何将此值设置为xaml中的double? 我尝试了所有这些方法都没有成功:

<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}" />

2 个答案:

答案 0 :(得分:1)

您可以将条目添加到资源中,然后从代码中将其取回。

        var key = SystemParameters.VerticalScrollBarWidthKey;
        Application.Current.Resources[key] = 42d;
        Double vsbWidth = (Double)Application.Current.Resources[key];
        Console.WriteLine(vsbWidth.ToString());

如果您想覆盖(例如)窗口范围内的值,则可以执行此操作。资源而不是应用程序。

答案 1 :(得分:0)

这似乎对我有用

<x:Static x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}" Member="local:Constants.scrollBarWidth" MemberType="{x:Type sys:Double}"></x:Static>

x:Static Markup Extension