Image.Location вариант для WPF? - PullRequest
0 голосов
/ 18 мая 2010

Я нуб, когда дело доходит до WPF; В выигрышных формах я могу сделать это:

public void blah()
{
   using( var o = new OpenFileDialog())
   {
        if(o.ShowDialog() == DialogResult.OK)
        {
             PictureBox p = new PictureBox();
             p.ImageLocation = o.FileName;
             p.AutoSize = SizeMode.AutoSize;
             this.Controls.Add(p);
        }
   }
}

Но в WPF я понятия не имею, и даже MSDN не даст мне четкой информации о том, как вставить изображение в форму во время выполнения! Может кто-нибудь помочь, пожалуйста?

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 18 мая 2010

Вы можете использовать XAML и некоторые привязки (и, возможно, конвертер для преобразования строки в источник изображения). Это больше соответствует способу работы WPF.

Пример без конвертера:

XAML

<Window
    ...
    x:Name="this"
    DataContext="{Binding ElementName=this}">
    <Grid>
        <ListView ItemsSource="{Binding MyImageCollection}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Image Source="{Binding}" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>

Код позади

public class Window1 : Window {
    public ObservableCollection<ImageSource> MyImageCollection { get; set; }
    ...
    public void blah()
    {
        using( var o = new OpenFileDialog())
        {
            if(o.ShowDialog() == DialogResult.OK)
            {
                MyImageCollection.Add(new BitmapImage(new Uri(o.FileName)));
            }
        }
    }
}
0 голосов
/ 10 августа 2011

Вот более простой способ сделать это.

 Image.Source = new BitmapImage(new Uri("C:\MyImage.jpg");
0 голосов
/ 18 мая 2010

В основном вам нужно создать System.Windows.Controls.Image и установить для Source значение System.Windows.Media.Imaging.BitmapImage. Затем добавьте изображение в Children Контейнера. Возможно, вы захотите сначала поместить изображение внутри другого контейнера, например, Canvas. Вот краткий перевод вашего кода, но вам, вероятно, придется немного поиграть с ним, чтобы сделать его правильно.

public void blah()
{
   using( var o = new OpenFileDialog())
   {
        if(o.ShowDialog() == DialogResult.OK)
        {
             Image i = new Image();
             i.Source = new BitmapImage(o.FileName);
             //p.AutoSize = SizeMode.AutoSize; <= not sure about this part.
             this.Children.Add(i);
        }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...