绑定到WPF中静态类中的静态属性

时间:2014-01-10 15:48:01

标签: c# wpf xaml binding static

我遇到静态类的静态属性绑定值的问题。

我的课程:

namespace MyNamespace.Data
{
    public static class MySettings
    {
        public static Color BackgroundColor { get; set; }
        public static Color FontColor { get; set; }
    }
}

XAML:

<Page ...
       xmlns:colors="clr-namespace:MyNamespace.Data"
      ...>
 ...
<Button Grid.Column="0" Content="Text"
        Background="{Binding Source={x:Static s:MySettings.BackgroundColor}}"
        Foreground="{Binding Source={x:Static s:MySettings.FontColor}}"
        BorderBrush="{Binding Source={x:Static s:MySettings.FontColor}}"/>

当我运行此代码后,后台设置正常,但其余部分保持不变..

2 个答案:

答案 0 :(得分:17)

问题是您的源属性属于Color类型,目标属性为Brush。您可以使用您的颜色创建SolidColorBrush,如下所示:

<Button Content="Text">
    <Button.Background>
        <SolidColorBrush Color="{Binding Source={x:Static s:MySettings.BackgroundColor}}"/>
    </Button.Background>
    <Button.Foreground>
        <SolidColorBrush Color="{Binding Source={x:Static s:MySettings.FontColor}}"/>
    </Button.Foreground>
    <Button.BorderBrush>
        <SolidColorBrush Color="{Binding Source={x:Static s:MySettings.FontColor}}"/>
    </Button.BorderBrush>
</Button>

答案 1 :(得分:8)

您不需要使用static属性...您可以使用Singleton模式声明一个类,因此只能有一个实例,只需就像一个static课程。只需在此类中使用正常的public CLR属性......类似这样(但具有属性):

public class StateManager : INotifyPropertyChanged
{
    private static StateManager instance;

    private StateManager() { }

    public StateManager Instance
    {
        get { return instance ?? (instance = new StateManager()); }
    }

    ...
}

然后仅使用Instance属性从基本视图模型引用它,如下所示:

public StateManager StateManager
{
    get { return StateManager.Instance; }
}

然后您可以简单地访问UI中的属性,例如::

<Ribbon:RibbonCheckBox Grid.Row="1" Label="Audit fields" 
    IsChecked="{Binding StateManager.AreAuditFieldsVisible}" ... />
<Ribbon:RibbonCheckBox Grid.Row="2" Label="ISRCs on results" 
    IsChecked="{Binding StateManager.AreIsrcsVisibleOnSearchResults}" ... />