它採取了一些調整,但是這是我的代碼終於解決:
我刪除從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}"/>
這是行不通的。 ResourceDictionary中的項目實例化一次,然後在每個地方重用。這可以使用畫筆和顏色來完成,但不能通過控件來完成。一個控件不能有多個父母。有一個你可以研究的特殊的VisualBrush,但它表明它不能被凍結,這可能意味着你可能不應該重用它。 – Wouter