在Button(xaml)

时间:2017-01-11 11:20:58

标签: c# wpf xaml

我在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有关。

我在互联网上看到的内容 - 有大量关于应该做什么和如何做的建议 - 我现在想要用绝对最少量的代码来完成 - 最好不使用绑定和模板。在手动完成所有操作后,可以提出绑定作为第二步。

1 个答案:

答案 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));