WPF中静态属性的数据绑定

3
我有一个简单的静态属性FontSizeTitle,它应该用于所有HandledWindow类型实例的样式化标题,并在更改属性后不需要显式通知从相同的静态属性更新。通过设置面板或者任何可以更改属性的方式来更改属性,以便为所有窗口的所有标题视觉上更改并更新字体大小。
这是我的XAML样式化标题的代码,它是HandledWindow模板的一部分,该模板是标准的XAML样式页面的一部分,在启动时由另一个库的资源字典加载。因此,它适用于出现在应用程序中的所有HandledWindow实例。
<TextBlock x:Name="TitleText"
       TextWrapping="Wrap"
       Text="Window Title"
       FontSize="{Binding Source={x:Static UI:HandledWindow.FontSizeTitle}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
       VerticalAlignment="Stretch"
       FontFamily="{DynamicResource FontFamiliy}" />

这是我的简单静态属性,注意绑定实际上只在第一次起作用。

public static double FontSizeTitle
{
    get;
    set;
}

通过 HandledWindow 类的基本构造函数,其大小被设置为 15。这个尺寸是有效的,但是如果在初始化后再次将其设置为另一种尺寸,可视化标题将不会更新。
1个回答

6

不确定你使用的是哪个版本的WPF。WPF 4.5现在支持静态属性的绑定和属性更改通知。

请参考这篇博客文章进行全面讨论。

因此,你的HandledWindows类将变成类似于以下内容:

public static class HandledWindow
{
    private static double _fontSizeTitle;

    public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

    static HandledWindow()
    {
        FontSizeTitle = 15;
    }

    public static double FontSizeTitle
    {
        get { return _fontSizeTitle; }
        set
        {
            _fontSizeTitle = value;
           StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(FontSizeTitle)));
        }
    }
}

而在XAML中的绑定将变为:

FontSize="{Binding Path=(local:HandledWindow.FontSizeTitle), Mode=OneWay}"

@adminSoftDK,你在使用.NET 4.5吗? - Suresh
是的,我有一个静态属性,我想要绑定它,但是那个委托总是为空,或者如果我将其赋值为 = delegate{ },它就是一个空委托。 - adminSoftDK

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