Как добавить существующий элемент через код в wpf - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь скопировать выбранное изображение в папку, а затем хочу отобразить его с объектом изображения. Копирование работает нормально, но когда я хочу отобразить его, кажется, что программа не может его найти. Отображение изображения работает, только если я вручную использую «Добавить существующий элемент». Есть ли способ добавить его автоматически?

Вот мой код:

string name = "image1";

OpenFileDialog dialog = new OpenFileDialog();

Nullable<bool> dialogOK = dialog.ShowDialog();

if(dialogOK == true)
{
     File.Copy(dialog.FileName, @"..\..\Images\" + name + ".png", true);


     image.Source = new BitmapImage(new Uri(@"Images\" + name + ".png", UriKind.Relative));
}

("изображение" определено в xaml)

1 Ответ

1 голос
/ 16 апреля 2020

Кажется более безопасным использовать абсолютный путь для загрузки BitmapImage:

var dialog = new OpenFileDialog();

if (dialog.ShowDialog() == true)
{
    var targetFile = @"..\..\Images\" + name + ".png";
    var currentDir = Environment.CurrentDirectory;
    var targetPath = Path.Combine(currentDir, targetFile);
    var targetDir = Path.GetDirectoryName(targetPath);

    Directory.CreateDirectory(targetDir);

    File.Copy(dialog.FileName, targetPath, true);

    image.Source = new BitmapImage(new Uri(targetPath));
}

Чтобы выпустить файл непосредственно после загрузки BitmapImage, загрузите его из FileStream:

BitmapImage bitmap = new BitmapImage();

using (var stream = File.OpenRead(targetPath))
{
    bitmap.BeginInit();
    bitmap.CacheOption = BitmapCacheOption.OnLoad;
    bitmap.StreamSource = stream;
    bitmap.EndInit();
}

image.Source = bitmap;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...