2013-09-04 8 views
5

Ho una risorsa definita nel mio XAML:Perché non posso impostare un valore di risorsa SolidColorBrush dal codice?

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

Sto cercando di impostarla dal codice:

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

ma ho l'errore:

Il metodo o il funzionamento è non implementato.

dello stack trace:

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) 

Succede quando invio fuori una richiesta a un server a prendermi un colore, poi quando ritorna provo e impostare quel colore alla risorsa, non riesce anche se Cerco di impostarlo come rosso in quel punto.

Se è utile, il metodo con cui sto impostando questo è un metodo di callback asincrono dalla chiamata WCF a un server.

+1

dovrebbe funzionare .. ho provato al mio fine è works.Where cosa stai impostando questo valore si può condividere un po 'di più il codice? – Nitin

+0

Sono d'accordo, l'errore non corrisponde a questa tipica azione. Potremmo avere uno stacktrace? –

+2

Forse questo è dovuto al fatto che: 'Silverlight non supporta le risorse dinamiche. Tutti i riferimenti di risorse alle risorse con chiave in XAML sono statici. Collegamento su [MSDN] (http://msdn.microsoft.com/en-us/library/cc903925 (VS.95) .aspx). –

risposta

7

Se si guarda il setter per ResourceDictionary in Reflector (per Silverlight), vedrai che getta un NotImplementedException, quindi questo non funzionerà in Silverlight.

Si potrebbe provare a rimuovere la risorsa e riaggiungerla, ma è una ripresa al buio.

+0

È pazzesco che Silverlight non lo supporta, ma la tua soluzione funziona ... – sprocket12

0

Questa operazione funziona come previsto se lo provate in una nuova applicazione WPF:

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

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

Pertanto, suggerisco a voi che il vostro problema è un altro.

UPDATE >>>

Come su come evitare questo problema del tutto e semplicemente utilizzando una proprietà public nella tua MainWindow.xaml.cs?

In MainWindow.xaml.cs:

public SolidColorBrush Brush { get; set; } 

Poi ovunque nella vostra applicazione, si dovrebbe essere in grado di accedere a questa proprietà come questa:

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

Sì, l'ho provato con una nuova applicazione WPF e funziona, ma sto usando Silverlight, forse fa la differenza. – sprocket12

+0

Sì, potrei usare una proprietà pubblica, solo il problema è che ho bisogno che questo colore sia disponibile in un IValueConverter ... – sprocket12

+0

Si prega di vedere il mio ultimo aggiornamento nella mia risposta. – Sheridan

3

"Questa implementazione dell'indicizzatore blocca in modo specifico un utilizzo" set ".Se si tenta di impostare un valore utilizzando l'indicizzatore, viene generata un'eccezione. È necessario rimuovere e aggiungere nuovamente a ResourceDictionary per modificare un valore-chiave paio."

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

Problemi correlati