与WPF中的静态属性绑定数据

时间:2013-12-02 02:19:56

标签: c# wpf xaml data-binding static

我有一个简单的静态属性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 个答案:

答案 0 :(得分:4)

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

有关完整讨论,请参阅此博客post

因此,您的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;
            if (StaticPropertyChanged != null)
                StaticPropertyChanged(null, new PropertyChangedEventArgs("FontSizeTitle"));
        }
    }
}

XAML中的Binding将成为:

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