我的xaml中定义了一个资源:
<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)
当我向服务器发送请求以获取颜色时会发生这种情况,然后当它返回时我尝试将该颜色设置为资源,即使我尝试在该点设置为红色也会失败。 / p>
如果它有帮助,我设置它的方法是从WCF调用到服务器的异步回调方法。
答案 0 :(得分:7)
如果你看一下Reflector中的ResourceDictionary
的setter(对于Silverlight),你会看到它抛出一个NotImplementedException
,所以这在Silverlight中不起作用。
您可以尝试删除资源并重新添加,但这是在黑暗中拍摄的。
答案 1 :(得分:3)
“此索引器实现专门阻止”set“用法。如果您尝试使用索引器设置值,则抛出异常。您必须删除并重新添加到ResourceDictionary才能更改键值对。“
http://msdn.microsoft.com/en-us/library/ms601221(v=vs.95).aspx
答案 2 :(得分:0)
如果您在新的WPF应用程序中尝试此操作将按预期工作:
<Window.Resources>
<SolidColorBrush x:Key="Brush" Color="Aqua" />
</Window.Resources>
public MainWindow()
{
this.Resources["Brush"] = new SolidColorBrush(Colors.Green);
InitializeComponent();
}
因此,我建议你的问题出在其他地方。
更新&gt;&gt;&gt;
如何完全避免此问题并在public
中使用MainWindow.xaml.cs
属性?
在MainWindow.xaml.cs
:
public SolidColorBrush Brush { get; set; }
然后在您的应用程序的任何位置,您应该能够像这样访问此属性:
((MainWindow)App.Current.MainWindow).Brush = new SolidColorBrush(Colors.Red);