2010-07-19 6 views
2

Я определил шаблон меню, который теоретически должен использовать цвет фона «AppBackground» SoliColorBrush, определенный в отдельном файле.WPF: изменить цвет фона шаблона

В режиме «отладки» я использую следующий код для изменения этой переменной: this.Resources [«AppBackground»] = новый SolidColorBrush (Colors.DarkGreen);

Это имеет предполагаемый эффект на фоне приложения, однако оно, похоже, не влияет на пользовательский дизайн меню, который у меня есть. Я попытался использовать как StaticResource, так и DynamicResource, без везения. Это известная проблема, и здесь есть трюк?

Определено в ResourceDirectory:

<SolidColorBrush x:Key="AppBackground" Color="#003466"/> 

Определено в файле:

<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type MenuItem}"> 
       <Border x:Name="Border" BorderThickness="1"> 
       <Grid Background="{Binding Source={StaticResource AppBackground}}"> 
+0

Как вы ссылаетесь на словарь Resouce на свою страницу через ресурсы приложения или локальный файл? – Ragunathan

ответ

2

Havent видел, что вы отметили, что она работает и не с DynamicBinding. Я только посмотрел на код. Вот почему я написал свой первый ответ:

Использование DynamicBinding, которое должно работать.

Настоящая проблема вы обертываете ресурс через привязку. Удалите это, как я писал в другом сообщении. Извините хаос с несколькими ответами.

<Grid Background="{DynamicResource AppBackground}">

+0

«Я попытался использовать как StaticResource, так и DynamicResource» – Will

+0

Точно, Dynamic не режет! Я верю, что он должен что-то сделать с свойством «шаблоны». –

+0

Кажется, сейчас! Спасибо –

2

Это, кажется, опечатка: Удалите {Binding..., и она работает:

<Grid Background="{DynamicResource AppBackground}"> 

связывание выступает в качестве обертки между Ressource и назначением и предотвращает отслеживание перемены.

+0

Возвращает ошибку времени выполнения: «Невозможно установить свойство для объекта» # FF003466, потому что он находится в состоянии только для чтения. Код запускается в функции «OnStartup», в разделе «public partial class App: Application» –

+0

См. Мое последнее изменение. .. – HCL

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