2014-07-23 93 views
1

我有一個帶有ResourceDictionary的.xaml文件,其中包含我所有的自定義圖標。從資源中顯示XAML中圖像的首選方式

例如爲:

<Canvas x:Key="imgFoo" Width="16" Height="16"> 
    <Path Fill="#FFFF0000" StrokeThickness="3" Stroke="#FFFF0000" StrokeMiterLimit="4" StrokeLineJoin="Round" StrokeStartLineCap="Round" StrokeEndLineCap="Round"> 
     <Path.Data> 
      <PathGeometry Figures="M 2.0722892 ..... 4.0457831" FillRule="NonZero"/> 
     </Path.Data> 
    </Path> 
</Canvas> 

現在的問題:什麼是使用XAML這一資源的最佳方式?

難道例如像這樣:

<TabItem> 
    <TabItem.Header> 
     <StackPanel Orientation="Horizontal"> 
      <ContentControl Content="{StaticResource imgFoo}" /> 
      <TextBlock Text="Foo" /> 
     </StackPanel> 
    </TabItem.Header> 

使用ContentControl中使用,並顯示該資源的正確方法是什麼?

更新: 和這種使用畫筆和邊框的方法呢?這是一個好方法嗎?

<DrawingBrush x:Key="imgF00"> 
    <DrawingBrush.Drawing> 
     <GeometryDrawing> 
      <GeometryDrawing.Pen> 
       <Pen Thickness="3" MiterLimit="4" LineJoin="Round" StartLineCap="Round" EndLineCap="Round" Brush="#FFFF0000" /> 
      </GeometryDrawing.Pen> 
      <GeometryDrawing.Geometry> 
       <PathGeometry Figures="M 2.0722892 ... 4.0457831" FillRule="NonZero" /> 
      </GeometryDrawing.Geometry> 
     </GeometryDrawing> 
    </DrawingBrush.Drawing> 
</DrawingBrush> 

顯示它通過邊界:

<TabItem> 
    <TabItem.Header> 
     <StackPanel Orientation="Horizontal"> 
      <Border Background="{StaticResource imgFail2}" Width="16" Height="16" /> 
      <TextBlock Text="Failure" /> 
     </StackPanel> 
    </TabItem.Header> 
+0

對於應用程序中的所有圖標,Path屬性(Fill,Stroke,StrokeThickness,...)是否相同?或者你是否至少有一組特定的圖標路徑屬性組合? – Clemens

+0

無論如何,你應該避免使用UI元素作爲資源。您可以使用PathGeometry作爲資源,或者如果每個圖標都有不同的填充和描邊等,可以使用GeometryDrawing。 – Clemens

+0

當前我的圖紙是在此處顯示的畫布中的路徑... – juFo

回答

2

而不是使用UI元素(如帆布的路徑)的圖標資源,你可以使用DrawingBrush對象是這樣的:

<DrawingBrush x:Key="imgFoo" ViewboxUnits="Absolute" Viewbox="0,0,16,16"> 
    <DrawingBrush.Drawing> 
     <GeometryDrawing Brush="#FFFF0000"> 
      <GeometryDrawing.Pen> 
       <Pen Thickness="3" Brush="#FFFF0000" MiterLimit="4" LineJoin="Round" StartLineCap="Round" EndLineCap="Round"/> 
      </GeometryDrawing.Pen> 
      <GeometryDrawing.Geometry> 
       <PathGeometry Figures="..." FillRule="NonZero"/> 
      </GeometryDrawing.Geometry> 
     </GeometryDrawing> 
    </DrawingBrush.Drawing> 
</DrawingBrush> 

你現在可以使用這樣的刷子來做例如矩形的填充屬性:

<TabItem.Header> 
    <StackPanel Orientation="Horizontal"> 
     <Rectangle Fill="{StaticResource imgFoo}" Width="16" Height="16"/> 
     <TextBlock Text="Foo" /> 
    </StackPanel> 
</TabItem.Header> 
+0

使用邊框或矩形有什麼區別嗎? (性能,內存使用情況,...?) – juFo

+0

不,沒有顯着差異。矩形可以被認爲更輕量,因爲它不能有子元素。 – Clemens

+0

完美,太糟糕了,關於如何做到「正確」的方式沒有好的資源:-) – juFo