2017-04-13 62 views
0

我有以下內容從單獨的文件中添加純XAML元素到資源字典

XAML文件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> 

正如你可以看到有沒有資源字典或定製在文件中的類。

現在我想包括Icon.xaml在資源字典,然後在我的代碼在任何地方使用它:

<Button Content="{StaticResource Icon}"/> 

不過,我不明白我怎麼能告訴一個資源字典只包括一個普通的XAML文件的內容。

請注意,我沒有試圖在運行時加載XAML文件,Icon.xaml被編譯到應用程序中。

+0

這是行不通的。 ResourceDictionary中的項目實例化一次,然後在每個地方重用。這可以使用畫筆和顏色來完成,但不能通過控件來完成。一個控件不能有多個父母。有一個你可以研究的特殊的VisualBrush,但它表明它不能被凍結,這可能意味着你可能不應該重用它。 – Wouter

回答

0

您是否嘗試過把它作爲app.xamlMergedDictionaries

<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。

+0

該文件不包含資源字典,因此我無法將其用作資源字典的源。 –

+0

我剛纔看到,它不是一個ResourceDictionary,但也許使它的resourceDictionary和內部樣式TargetType =控制使你的矩形。 –

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}"/> 
相關問題