我有一个xaml文件,其中包含我在窗口中使用的一系列资源。具体来说,我有两个Image
个对象。我需要在Window的构造函数中设置这些图像,而不是编码URI位置。我怎么能这样做?
我进行了搜索和搜索,并尝试设置图像.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 :(得分:1)
您可以声明并绑定到MainWindow类中的两个属性,而不是使用Image控件作为资源。
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(...);