2017-03-09 18 views
1

這是我第一次在XAML中使用圖像作爲資源。我宣佈一個Image類型的資源我Window.Resources節點內,通過以下方式:XAML:如何使用Resources資源節點中聲明的<Image>類型資源?

<Window.Resources> 
    <Image x:Key="MyIcon" Source="pack://application:,,,/Resources/Images/myicon.png"/> 
</Window.Resources> 

如何使用在XAML代碼的其他部分這一資源?

必須是微不足道的,但我沒有找到任何有關如何使用Image類型資源的信息。

顯然,使用資源爲Image控制的Source屬性不起作用:

 <WrapPanel Background="Transparent" Height="50"> 
      <Image Source="{StaticResource MyIcon}"/> 
     </WrapPanel> 

的代碼,同時設置Source屬性,具有以下InnerException上述拋出一個異常:

{"'System.Windows.Controls.Image' is not a valid value for property 'Source'."} 

回答

3

使用BitmapImage代替Image作爲資源類型:

<Window.Resources> 
    <BitmapImage x:Key="MyIcon" 
       UriSource="pack://application:,,,/Resources/Images/myicon.png"/> 
</Window.Resources> 
... 
<WrapPanel Height="50"> 
    <Image Source="{StaticResource MyIcon}"/> 
</WrapPanel> 

你也不必寫一個完整的資源文件在XAML包URI,所以你可以寫的資源聲明像這樣:

<BitmapImage x:Key="MyIcon" UriSource="/Resources/Images/myicon.png"/> 
+0

是否使用'BitmapImage'作爲資源類型通常被認爲是一個更好的做法?如果是這樣,你可以簡單地解釋它,我會將你的答案設置爲解決方案。 –

+1

這是更好的,因爲圖像是一個UIElement(而BitmapImage不是)。這使得它很難在多個地方使用,因爲它不能是多個父元素的子元素。您至少必須設置'x:Shared =「False」' – Clemens

+1

除此之外,當您使用URI屬性的URI字符串創建Image控件時,該字符串會自動轉換爲BitmapFrame,類似於BitmapImage的類都來自BitmapSource)。所以你會創建一個Image和一個BitmapFrame,而不僅僅是一個BitmapImage。 – Clemens

1

您可以在WrapPanel中使用ContentControl並重復使用之前聲明的Image資源:

<WrapPanel Background="Transparent" Height="50"> 
    <ContentControl Content="{StaticResource MyIcon}" /> 
</WrapPanel> 
+0

哦,我的天啊,它的工作原理!我知道這一定是微不足道的。謝謝! (Köszönöm!) –

+0

Szívesen! :)順便說一句,你收到另一個替代答案 –