2015-02-11 75 views
0

我有一個xaml文件,它有一系列我在窗口中使用的資源。具體來說,我有兩個Image對象。我不需要編碼URI位置,而需要在我的Window的構造函數中設置這些圖像。我怎樣才能做到這一點?如何以編程方式設置Xaml定義的Window.Resource圖像?

我搜索和搜索,我試圖設置圖像.Source屬性。沒有任何工作。作爲參考,這裏就是這些圖像是如何在我的XAML文件中聲明:

<Window.Resources> 
    <Image x:Key="iUpdate" /> 
    <Image x:Key="iDelete" /> 
</Window.Resources> 

這裏是他們是如何使用按鈕的內容:

   <DataTemplate> 
        <DockPanel> 
         <Button Name="UpdateChange" Content="{StaticResource iUpdate}" Width="24" /> 
         <Button Name="DeleteChange" Content="{StaticResource iDelete}" Width="24" /> 
         <Label Content="{Binding name}" /> 
        </DockPanel> 
       </DataTemplate> 

這是我在設定失敗的嘗試圖像的資源。

 //In my constructor... 
     // iUpdate is a property on the Window 
     iUpdate = (Image)FindResource("iUpdate"); 
        iUpdate = new Image(); 
     iUpdate.Source = ImageHelpers.ConvertBitmapToImageSource(Common.LoadImage("edit.ico")); 

僅供參考,我不能設置在我的XAML文件的來源,因爲調用Common.LoadImage(...)是一個特殊的調用,解決了文件的位置。從用戶到用戶,這可能會有很大的不同,這就是輔助方法首先存在的原因。

+0

爲什麼你不只是綁定到兩個視圖模型屬性?您將在XAML中創建Image控件作爲Button的內容,並將它們的Source屬性綁定到視圖模型屬性(或者如果您喜歡的話,可以將其與MainWindow類的屬性綁定)。無論如何,控制資源是一個壞主意。 – Clemens 2015-02-11 21:53:47

+0

@Clemens我會研究一下。這是我第一次嘗試WPF。這種方法可能有效。我怎麼做? – RLH 2015-02-11 21:56:24

回答

1

而不是使用圖像控件作爲資源,您可以聲明和綁定到您的MainWindow類中的兩個屬性。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     UpdateImage = ImageHelpers.ConvertBitmapToImageSource(...); 
     DeleteImage = ImageHelpers.ConvertBitmapToImageSource(...); 

     InitializeComponent(); 
    } 

    public ImageSource UpdateImage { get; set; } 
    public ImageSource DeleteImage { get; set; } 
} 

你會通過向窗口

<Window ... x:Name="window"> 

分配一個名稱綁定到這些屬性和聲明的ElementName綁定:

<Button ...> 
    <Button.Content> 
     <Image Source="{Binding UpdateImage, ElementName=window}"/> 
    </Button.Content> 
</Button> 

並回答你的問題,你的問題在於,在分配它之後立即將一個新的Image實例分配給iUpdate字段資源實例。你的代碼應該看起來像這樣:

iUpdate = (Image)Resources["iUpdate"]; 
iUpdate.Source = ImageHelpers.ConvertBitmapToImageSource(...); 
相關問題