在DataGrid中加载ResourceDictionary组件

时间:2014-03-21 13:13:44

标签: c# wpf xaml resourcedictionary

在过去的几个小时里我很擅长编码和挣扎,甚至找不到合适的方法。

我想从ResourceDictionary中的一个DataGrid Skin.xaml加载所有数据并将其显示在屏幕上,以便用户可以更改内容并将其保存回相同的皮肤或另一个皮肤。

这是来自ResourceDictionary xaml

的数据的一部分
<SolidColorBrush x:Key="Button01" Color="#FFABABAB"/>
<SolidColorBrush x:Key="TitleBar" Color="#FFABABAB"/>
<SolidColorBrush x:Key="Background" Color="#FF5B5B5B"/>

我alredy创建了DataGrid并将DataTable绑定到它以插入数据

this.ResourceToLoad = new DataTable("Resources");
        DataColumn workCol = ResourceToLoad.Columns.Add("Name", typeof(String));
        workCol.AllowDBNull = false;
        workCol.Unique = true;
        this.ResourceToLoad.Columns.Add("Color", typeof(String));
        dgResources.DataContext = this;

我遇到的问题是如何将数据从ResourceDictionary插入DataTable

1 个答案:

答案 0 :(得分:3)

如果在您的上下文中加载了ResourceDictionary,您可以执行以下操作来加载资源:

var buttonBrush = (Brush)FindResource("Button01");

否则您必须先加载ResourceDictionary

ResourceDictionary loadedDictionary;
using (FileStream fs = new FileStream("yourpath/Skin.xaml", FileMode.Open))
    {
       loadedDictionary = (ResourceDictionary)XamlReader.Load(fs);
    }

var buttonBrush = (Brush)loadedDictionary["Button01"];

修改 使用foreach循环,您可以获得字典条目的键和值:

 foreach (DictionaryEntry entry in loadedDictionary)
 {
    var key = entry.Key;
    var resource = entry.Value;
 }