C# 使用转换器绑定到静态资源
我有一个C# 使用转换器绑定到静态资源,c#,silverlight,datagrid,converter,staticresource,C#,Silverlight,Datagrid,Converter,Staticresource,我有一个DataGrid和两个StaticResource 我想将DataGrid的RowStyle绑定到两个静态资源之一 RowStyle="{StaticResource {Binding Status, Converter={StaticResource MyConverter}}}" MyConverter返回StaticResource的密钥 但我得到了这个错误: 尝试读取或写入受保护内存。这通常表示其他内存已损坏。静态资源键不是可动态分配的值。密钥的名称需要内联到Xaml中 正确的
DataGrid
和两个StaticResource
我想将DataGrid的RowStyle
绑定到两个静态资源之一
RowStyle="{StaticResource {Binding Status, Converter={StaticResource MyConverter}}}"
MyConverter返回StaticResource的密钥
但我得到了这个错误:
尝试读取或写入受保护内存。这通常表示其他内存已损坏。
静态资源键不是可动态分配的值。密钥的名称需要内联到Xaml中
正确的方法是:-
RowStyle="{Binding Status, Converter={StaticResource MyConverter}}"
其中,存储在“MyConverter”键上的转换器返回一个样式
对象。注意:您可以向转换器添加类型为ResourceDictionary
的属性,并将样式放置在该字典中,以便转换器进行查找
事实上,我已经编写了一个能够实现这一点的转换器。如何填写
资源字典项
?这是空的。@Navid:在博客文章中启动Xaml注意,包含的项目在
元素中。OK TNX,正在工作。是否可以使用另一个ResourceDictionary
,例如App.xaml
中的ResourceDictionary
?@Navid:只需将转换器移动到App.xaml即可。
// Another version of writing such a converter
public abstract class BaseConverter : MarkupExtension
{
protected IServiceProvider ServiceProvider { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
ServiceProvider = serviceProvider;
return this;
}
}
public class StaticResourceConverter : BaseConverter, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return new StaticResourceExtension(value).ProvideValue(ServiceProvider);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
//TODO - implement this for a two-way binding
throw new NotImplementedException();
}
}