我遇到静态类的静态属性绑定值的问题。
我的课程:
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}}"/>
当我运行此代码后,后台设置正常,但其余部分保持不变..
答案 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}" ... />