如何以编程方式设置 Xaml 定义的 Window.Resource 图像?
How do you set a Xaml defined, Window.Resource Image programmatically?
我有一个 xaml 文件,其中包含我在 window 中使用的一系列资源。具体来说,我有两个 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(...)
的调用是解析文件位置的特殊调用。这可能因用户而异,这就是 helper-method 首先存在的原因。
您可以在 MainWindow class.
中声明并绑定两个属性,而不是将 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
分配名称来绑定到这些属性
<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(...);
我有一个 xaml 文件,其中包含我在 window 中使用的一系列资源。具体来说,我有两个 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(...)
的调用是解析文件位置的特殊调用。这可能因用户而异,这就是 helper-method 首先存在的原因。
您可以在 MainWindow class.
中声明并绑定两个属性,而不是将 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
分配名称来绑定到这些属性<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(...);