我在xaml中有以下代码段:
<UserControl x:Class="Ournamespace.OurClassName"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
...
d:DesignHeight="250" d:DesignWidth="774" Loaded="UserControl_Loaded">
....
<Button Grid.Column="0" x:Name="Button_NewMarker" Style="{StaticResource ViewpointFlatButtonStyle}" Width="90" Height="65"
VerticalAlignment="Top" Click="Button_NewMarker_Click" x:FieldModifier="public" Margin="0,0,0,0" Grid.Row="1">
<BitmapImage UriSource="Icons/markers_add_disabled.png" />
</Button>
我试图通过加载新图像来动态替换按钮上的图像
if( !imgCache.ContainsKey(path) )
{
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(path, UriKind.Relative);
bi.DownloadFailed += bi_DownloadFailed;
bi.DecodeFailed += bi_DecodeFailed;
bi.EndInit();
imgCache[path] = bi;
}
Button_NewMarker.BeginInit();
Button_NewMarker.Content = imgCache[path];
//Button_NewMarker.Content = oldbmp;
Button_NewMarker.EndInit();
没有错误发生(为此重写的事件) 和BitmapImage似乎被取代 - 但由于某种原因,它是灰色的。 图像作为资源添加到项目中,第一个加载的图像似乎正在工作 - 但不能动态替换一个。
我也试过使用<Image ... >
甚至<Image ... <ImageBitmap
- 但所有这些都没有用 - 我怀疑它与我们的控件是UserControl有关。
我在互联网上看到的内容 - 有大量关于应该做什么和如何做的建议 - 我现在想要用绝对最少量的代码来完成 - 最好不使用绑定和模板。在手动完成所有操作后,可以提出绑定作为第二步。
答案 0 :(得分:1)
如果将图像文件作为资源文件(即将Build Action
设置为Resource
的项目文件)进行管理,则应按Resource File Pack URI加载它们。
假设项目文件夹Images
包含图像文件Test.png
:
var bi = new BitmapImage(new Uri("pack://application:,,,/Images/Test.png"));
使用文件名作为键,abobe可能看起来像:
var path = "Test.png";
var uri = "pack://application:,,,/Images/" + path;
imgCache[path] = new BitmapImage(new Uri(uri));