WPF图像不会随源更改而更改

时间:2013-02-14 17:22:28

标签: c#

您好我想通过打开en openfiledialog并选择一个新的来更改图像..这通过更改源..但它不起作用..你能帮我吗? Paginaholder是我的形象..

private void pdfOpenen()
{
    Microsoft.Win32.OpenFileDialog d = new Microsoft.Win32.OpenFileDialog();
    d.FileName = "Document";//begin map 
    Nullable<bool> pad = d.ShowDialog();
    //Controleren of er een bestand geselecteerd werd
    if (pad == true)
    {
        PaginaHolder.Source = BitmapFromUri(new Uri(pad, UriKind.Relative));
    }
}
public static ImageSource BitmapFromUri(Uri source)
        {
            var bitmap = new BitmapImage();
            bitmap.BeginInit();
            bitmap.UriSource = source;
            bitmap.CacheOption = BitmapCacheOption.OnLoad;
            bitmap.EndInit();
            return bitmap;
        }

2 个答案:

答案 0 :(得分:1)

应该解决的一些问题:

PaginaHolder.Source = BitmapFromUri(new Uri(pad, UriKind.Relative));

具体做法是:

new Uri(pad, UriKind.Relative)

没有Uri构造函数将可以为空的bool作为参数。使用:

PaginaHolder.Source = new BitmapImage( new Uri( d.FileName ) );

这是一个完整的工作示例:

var d = new OpenFileDialog();
d.Title = "Select a picture";
d.Filter = "All supported graphics|*.jpg;*.jpeg;*.png|JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|Portable Network Graphic (*.png)|*.png";
if( d.ShowDialog() == true )
{
    PaginaHolder.Source = new BitmapImage( new Uri( d.FileName ) );
}

您还可以使用BitmapFromUri方法:

PaginaHolder.Source = BitmapFromUri( new Uri( d.FileName ) );

答案 1 :(得分:0)

我将pdf文档转换成单独的图像与转换器工作正常..当我打开一个新的PDF文档时,我的转换删除前一个第一个图像,然后将新的图像添加到地图..这工作正常,但我的应用程序一直显示我以前的图像,当前一个图像已经从我的调试图中消失时,这怎么办?这是我的代码:

Microsoft.Win32.OpenFileDialog d = new Microsoft.Win32.OpenFileDialog();
d.FileName = "Document";//begin map 
d.DefaultExt = ".pdf";
d.Filter = "PDF Files(*.pdf)|*.pdf";
Nullable<bool> pad = d.ShowDialog();
pdfPad = d.FileName;
File.Delete(AppDomain.CurrentDomain.BaseDirectory+"1.jpg");
pdfconverter.convertPDF(1, pdfPad);
pdfAantalPaginas = pdfconverter.getAantalPaginas(pdfPad);
Uri test = new Uri(AppDomain.CurrentDomain.BaseDirectory + "1.jpg");
PaginaHolder.Source = BitmapFromUri(test);
PaginaHolder.Source.Freeze();