2013-09-04 8 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呼び出しからサーバーへの非同期コールバックメソッドです。

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

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

したがって、私はあなたの問題は別の場所にあることをあなたにお勧め:あなたは新しいWPFアプリケーションでそれをしようとした場合

+1

..私は、それは正確にあなたがあなたには、いくつかのより多くのコードを共有することができ、この値を設定しているworks.Where私の最後でそれを試してみましたか? – Nitin

+0

私は同意する、エラーはこの典型的なアクションと一致しません。スタックトレースがありますか? –

+2

これはおそらく、次のような事実によるものです。「Silverlightは動的リソースをサポートしていません。 XAMLのキー付きリソースへのすべてのリソース参照は静的です。[MSDN](http://msdn.microsoft.com/en-us/library/cc903925(VS.95).aspx)にリンクしてください。 –

答えて

7

public SolidColorBrush Brush { get; set; } 

そして、どこでも、あなたのアプリケーションでは、あなたこのように、このプロパティにアクセスすることができるはずです(Silverlightの場合)、NotImplementedExceptionを投げるので、Silverlightでは動作しません。

リソースを削除して再追加することはできますが、それは暗闇の中のショットです。

+0

Silverlightはそれをサポートしていませんが、あなたの回避策はうまくいきます... – sprocket12

0

この操作は期待通りに動作します。

UPDATE >>>

どのようにこの問題を完全に回避し、単にあなたのMainWindow.xaml.cspublicプロパティを使用してはどうですか? MainWindow.xaml.cs

:あなたはリフレクターでResourceDictionary用セッターを見れば

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

はい新鮮なWPFアプリケーションで試してみましたが、うまくいきましたが、おそらくSilverlightを使用しています。 – sprocket12

+0

はい私は公共のプロパティを使用することができました。問題は、このカラーをIValueConverterに使用する必要があることだけです。 – sprocket12

+0

私の答えは最新の更新をご覧ください。 – Sheridan

関連する問題