2013-09-04 2 views
5

Я ресурс определен в моем XAML:Почему я не могу установить значение ресурса SolidColorBrush из кода?

<core:WidgetBase xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="....Silverlight.LiquidityConstraintsView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:core="clr-namespace:...Silverlight;assembly=....Silverlight" 
    xmlns:local="clr-namespace:....Silverlight" 
    mc:Ignorable="d"> 

    <core:WidgetBase.Resources> 
     <SolidColorBrush x:Key="..." /> 
    </core:WidgetBase.Resources> 
... 

Я пытаюсь установить его из кода:

void _administrationClient_GetByFilterModuleSettingCompleted(object sender, GetByFilterModuleSettingCompletedEventArgs e) 
{ 
     this.Resources["..."] = new SolidColorBrush(Colors.Red); 
} 

Но я получаю ошибку:

Метод или операция является не реализована.

трассировка стеки:

at System.Windows.ResourceDictionary.set_Item(Object key, Object value) 
    at ....Silverlight.LiquidityConstraintsView._administrationClient_GetByFilterModuleSettingCompleted(Object sender, GetByFilterModuleSettingCompletedEventArgs e) 
    at ....Service.AdministrationServiceClient.OnGetByFilterModuleSettingCompleted(Object state) 

Это происходит, когда я отсылаю запрос на сервер, чтобы принести мне цвет, а затем, когда он возвращается Стараюсь и установить этот цвет к ресурсу, он не даже если Я пытаюсь установить его как красный в этот момент.

Если это вообще помогает, метод, которым я устанавливаю это метод асинхронного обратного вызова из вызова WCF на сервер.

+1

он должен работать .. я попробовал его на моем конце это works.Where именно вы устанавливать это значение вы можете поделиться еще какой-то код? – Nitin

+0

Согласен, ошибка не соответствует этому типичному действию. Можем ли мы иметь стек? –

+2

Возможно, это связано с тем, что: «Silverlight не поддерживает динамические ресурсы. Все ссылки на ресурсы для ключевых ресурсов в XAML являются static.' Ссылка на [MSDN] (http://msdn.microsoft.com/en-us/library/cc903925 (VS.95) .aspx). –

ответ

7

Если посмотреть на инкубаторе для ResourceDictionary в Рефлекторе (для Silverlight), вы увидите, что он выбрасывает NotImplementedException, поэтому это не будет работать в Silverlight.

Вы можете попробовать удалить ресурс и повторно добавить его, но это выстрел в темноте.

+0

Его безумие, что silverlight не поддерживает это, но ваше обходное решение работает ... – sprocket12

0

Эта операция будет работать как ожидается, если вы попробуете его в новое приложение WPF:

<Window.Resources> 
    <SolidColorBrush x:Key="Brush" Color="Aqua" /> 
</Window.Resources> 

public MainWindow() 
{ 
    this.Resources["Brush"] = new SolidColorBrush(Colors.Green); 
    InitializeComponent(); 
} 

Поэтому я предлагаю вам, что ваша проблема заключается в другом.

UPDATE >>>

Как насчет избежать этой проблемы в целом и просто используя public свойство в вашем MainWindow.xaml.cs?

В MainWindow.xaml.cs:

public SolidColorBrush Brush { get; set; } 

Тогда в любом месте вашего приложения, вы должны быть в состоянии получить доступ к этому свойству, как это:

((MainWindow)App.Current.MainWindow).Brush = new SolidColorBrush(Colors.Red); 
+0

Да, я попробовал его в новом приложении WPF, и он работает, но я использую silverlight, возможно, это имеет значение. – sprocket12

+0

Да, я мог бы использовать публичное свойство, только проблема с этим - мне нужно, чтобы этот цвет был доступен в IValueConverter ... – sprocket12

+0

Пожалуйста, см. Мое последнее обновление в моем ответе. – Sheridan

3

«Эта реализация индексатора блокирует использование« набора ». Если вы пытаетесь установить значение с помощью индексатора, генерируется исключение. Вы должны удалить и повторно добавить в ResourceDictionary, чтобы изменить значение ключа пара «.

http://msdn.microsoft.com/en-us/library/ms601221(v=vs.95).aspx

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