簡體   English   中英

綁定到 WPF 中靜態類中的靜態屬性

[英]Binding to static property in static class in WPF

我在綁定來自靜態類的靜態屬性的值時遇到問題。

我的課:

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

當我運行此代碼時,背景設置正常,但其余部分保持不變..

問題是您的源屬性是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>

您不需要使用static屬性...您可以使用Singleton模式聲明一個類,因此只能有一個實例,就像static類一樣。 只需在這個類中使用普通的public CLR 屬性......像這樣(但有屬性):

public class StateManager
{
    private static StateManager instance;
    
    private StateManager() { }

    public static 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}" ... />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM