首页 > 解决方案 > 如何在wpf中浏览整个资源文件。查找所有键并使用该键制作图像

问题描述

假设我的项目中的资源字典很少。他们命名为 1,2,3 等...从后面的代码中我想转到“1”资源文件,找到所有“x:keys”并按该键图像制作...每个资源字典文件看起来像这样,但是有很多这样的代码:

  <DrawingImage x:Key="Image1"  x:Name="Image1">
        <DrawingImage.Drawing>
            <DrawingGroup ClipGeometry="M0,0 H64 H0 Z">
                <DrawingGroup.Transform>
                    <TranslateTransform X="0.091821998357772827" Y="0" />
                </DrawingGroup.Transform>
                <DrawingGroup Opacity="1" Transform="1,0,0,1,1,1.01">
                    <DrawingGroup Transform="1,0,0,1,6.03,28.74">
                        <GeometryDrawing Geometry="F1 M64 26.4,0 0,31.3z">
                            <GeometryDrawing.Pen>
                                <Pen Brush="#FF000000" Thickness="1" StartLineCap="Flat" EndLineCap="Flat" LineJoin="Miter" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                    </DrawingGroup>
                    <DrawingGroup Transform="1,0,0,1,2.82,-0.01">
                        <GeometryDrawing Geometry="F1 .4,21.8 53.1,45.7 29.7,49.9 6.7,54 0.1,29.7 0.1,29.7 0.1,29.7 50.4,21.8z">
                            <GeometryDrawing.Pen>
                                <Pen Brush="#FF000000" Thickness="1" StartLineCap="Flat" EndLineCap="Flat" LineJoin="Miter" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                    </DrawingGroup>
                    <DrawingGroup Transform="1,0,0,1,0,20.91">
                        <GeometryDrawing Geometry="F1 0,15.4 0,0z" />
                    </DrawingGroup>
                </DrawingGroup>
            </DrawingGroup>
        </DrawingImage.Drawing>
    </DrawingImage>

这段代码是从 Xaml 到 SVG 转换器制作的,所以我有一些库,其中包含来自不同资源字典的图像,并希望将它们添加到集合中,然后通过 ViewModel 等绑定它......每个资源当然都有唯一的 x :钥匙。我尝试将它们添加到 StackPanel 中,然后通过该 stackPanel,例如

foreach(var image in StackPanel)
{
    Image image1 = new Image();
    image1.Source = image;
    MyCollection.Add(image)
}

但这有点乱。希望你们能帮助我找到更好的解决方案!

标签: c#wpf

解决方案


您可以在代码中加载资源字典并像这样遍历它们的键:

if (!(Application.LoadComponent(
    new Uri("YourUriToYourResourceDictionary.xaml", 
        UriKind.Relative)) is ResourceDictionary rd))
{
    return;
}

var keys = rd.Keys;

foreach(var key in keys)
{
    //Use Application.Current.TryFindResource(key) and do whatever you need to do.
}

推荐阅读