我有一个包含以下内容的xaml文件
Icon.xaml
(Import Component>Import Type Library)
正如您所看到的,文件中没有资源字典或自定义类。
现在我想将Icon.xaml包含在资源字典中,然后在我的代码中的任何地方使用它:
<Rectangle xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Icon"
Width="16" Height="16">
<!-- Fancy DrawingBrush here to make a sweet icon -->
</Rectangle>
但是,我不明白如何告诉资源字典只包含普通XAML文件的内容。
请注意,我不是在运行时尝试加载XAML文件,而是将Icon.xaml编译到应用程序中。
答案 0 :(得分:0)
您是否曾尝试将其app.xaml
作为MergedDictionaries
<Application x:Class="WPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="FolderWhereIsYourIconXaml/Icon.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
这样你可以像{StaticResource Icon}
但你必须把它变成一个ResouceDictionary。
答案 1 :(得分:0)
这需要一些调整,但这是我最终确定的代码:
我从DrawingBrush中删除了边界矩形,因为这是我真正想要的唯一东西:
<强> Icon.xaml 强>
<DrawingBrush xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
<GeometryDrawing Brush="{StaticResource IconForegroundBrush}" Geometry="F1M8.999,1C7.814,1,6.666,1.422,5.768,2.188L3.992,3.692 3.992,1 1.994,3 1.994,5 1.994,6 1.994,7 5.99,7 7.988,5 5.54,5 7.061,3.713C7.6,3.253 8.289,3 8.999,3 10.651,3 11.996,4.346 11.996,6 11.996,6.877 11.613,7.708 10.936,8.29L5.34,13.252 6.664,14.748 12.248,9.797C13.358,8.846 13.994,7.461 13.994,6 13.994,3.243 11.753,1 8.999,1" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
我还将Icon.xaml的构建操作设置为Resource
而不是Page
。
我已经创建了一个帮助程序类IconLocator
来为我加载图标:
public static DrawingBrush Icon => Load("Icon.xaml");
private static DrawingBrush Load(string fileName)
{
var uri = new Uri(Prefix + fileName);
var info = Application.GetResourceStream(uri);
var brush = XamlReader.Load(info.Stream) as DrawingBrush;
return brush;
}
我现在可以在任何地方使用这个DrawingBrush:
<Border Background="{x:Static res:IconLocator.Icon}"/>