2013-09-04 19 views
5

Mam zasobu zdefiniowane w moim XAML:Dlaczego nie mogę ustawić wartości zasobów SolidColorBrush z kodu?

<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> 
... 

Próbuję ustawić go od kodu:

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

Ale pojawia się błąd:

Metoda lub operacji jest nie zaimplementowano.

stos ślad:

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) 

Zdarza się, kiedy wysłać off żądanie do serwera, aby sprowadzić mnie kolor, a następnie po powrocie staram i ustawić ten kolor do zasobu, to nie, nawet jeśli Próbuję ustawić go jako czerwony w tym punkcie.

Jeśli to w ogóle pomaga, metoda, w której to ustawiam, jest asynchroniczną metodą wywołania zwrotnego z wywołania WCF na serwer.

+1

powinno działać .. Próbowałem go na moim końcu works.Where dokładnie ty ustawienie tej wartości można podzielić trochę więcej kodu? – Nitin

+0

Zgadzam się, błąd nie pasuje do tego typowego działania. Czy możemy mieć stacktrace? –

+2

Być może wynika to z faktu, że: "Silverlight nie obsługuje dynamicznych zasobów. Wszystkie odwołania do zasobów do zasobów klucza w XAML są statyczne. Link na [MSDN] (http://msdn.microsoft.com/en-us/library/cc903925 (VS.95) .aspx). –

Odpowiedz

7

Jeśli spojrzeć na ustawiająca dla ResourceDictionary odbłyśnikiem (dla Silverlight), zobaczysz, że rzuca NotImplementedException, więc to nie będzie działać w Silverlight.

Możesz spróbować usunąć zasób i ponownie go dodać, ale to strzał w ciemność.

+0

Szalone, że silverlight to nie wspiera, ale twoje obejście działa ... – sprocket12

0

Operacja ta będzie działać zgodnie z oczekiwaniami, jeśli spróbujesz go w nowej aplikacji WPF:

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

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

Dlatego radzę wam, że problem leży gdzie indziej.

UPDATE >>>

Jak o uniknięcie tego problemu w ogóle i po prostu przy użyciu właściwości public w MainWindow.xaml.cs?

W MainWindow.xaml.cs:

public SolidColorBrush Brush { get; set; } 

Następnie gdziekolwiek w aplikacji, należy mieć dostęp do tej właściwości tak:

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

Tak, wypróbowałem go w nowej aplikacji WPF i działa, ale używam silverlight może to robi różnicę. – sprocket12

+0

Tak, mógłbym użyć własności publicznej, tylko problem z tym, że potrzebuję tego koloru dostępnego by być w IValueConverterze ... – sprocket12

+0

Proszę zobaczyć moją ostatnią aktualizację w mojej odpowiedzi. – Sheridan