Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用转换器绑定到静态资源_C#_Silverlight_Datagrid_Converter_Staticresource - Fatal编程技术网

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(); 
    }
}