2016-01-06 3 views
-2

Я получил следующую структуру папок в моей проблеме:Binding Фон из другого класса

- Themes     // folder 
    - ThemeManager.cs  // self explaining 
    - ITheme.cs    // theme interface 
    - Light.cs    // typeof ITheme 

ThemeManager.cs:

public static class ThemeManager 
{ 
    public static ITheme Theme { get; set; } = new Light(); 
} 

ITheme.cs:

//using System.Windows.Media 
public interface ITheme 
{ 
    string Color { get; set; } 
    Brush Color2 { get; set; } 
} 

Light .cs: ​​

//using System.Windows.Media 
class Light : ITheme 
{ 
    public string Color { get; set; } = "#FF00FF00"; 
    public Brush Color2 { get; set; } = new SolidColorBrush(Colors.Lime); 
} 

Все три файла находятся в пространстве имен MyProject.Themes.

Я использую следующий код для связывания Background свойства в моем XAML

xmlns:theme="clr-namespace:MyProject.Themes.ThemeManager.Theme" 

но оба

Background="{Binding theme:Color}" 
Background="{Binding theme:Color2}" 

сделать фон прозрачным из-за отсутствие результата от связывания.

Что я делаю неправильно? Как правильно привязать фон?

ответ

1

xmlns означает пространство имен XML. Это пространство имен. Поэтому он должен быть xmlns: theme = "clr-namespace: MyProject.Themes". Кроме того, это статическое свойство, вы не можете связывать его так же, как нестатический.

В вашем случае, это

Background="{Binding Color, Source={x:Static theme:ThemeManager.Theme}}" 
+0

К сожалению, этот вопрос касается UWP (судя по тегу), а UWP-вкус XAML не поддерживает 'x: Static'. (Ваш комментарий действителен для полного WPF.) –

+0

К сожалению, мой плохой - я неправильно читаю тег WPF как UWP. Извиняюсь! –

0

Я не в состоянии сделать ваш XAML компилировать как есть - компилятор не любит привязки. Как бы то ни было, статическая привязка не самая сильная сторона UWP-вкуса XAML; Я не знаю, как сделать точно, что вы хотите.

Один подход, чтобы добавить свойство (не статический) в код-за ...

public string ThemeBackground => ThemeManager.Theme.Color; 

... и привязывать к этому:

Background="{x:Bind ThemeBackground}" 

Если вы хотите используйте Binding, а не x:Bind по какой-либо причине, добавьте свойство в свой тип контекста данных.

Смежные вопросы