2015-02-11 82 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(...); 
相关问题