WPF的Image.Location变体?

时间:2010-05-18 12:20:39

标签: c# .net wpf winforms image

对于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 :(得分:0)

基本上,您需要创建System.Windows.Controls.Image并将其Source设置为System.Windows.Media.Imaging.BitmapImage。然后将图像添加到Container的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);
        }
   }
}

答案 1 :(得分:0)

您可以使用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)));
            }
        }
    }
}

答案 2 :(得分:0)

这是一种更简单的方法。

 Image.Source = new BitmapImage(new Uri("C:\MyImage.jpg");