在新窗口中显示单击按钮的图像

时间:2014-07-15 01:54:25

标签: c# wpf xaml

我有一个包含图像,名称(字符串)和引用(字符串)的网格视图,图像大小为50x50并包含在一个按钮中,所以我希望每次用户点击图像“按钮”时图像显示在新窗口中。

这就是我如何进行

网格视图的XAML代码:

<Grid Background="#FFE5E5E5">
      <ListView Name="ListView">
          <ListView.View>
              <GridView>
                   <GridViewColumn Header="Image" Width="120">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                 <Button Content="{Binding Image}" Click="ImageButtonClicked"></Button>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                   </GridViewColumn>
                  <GridViewColumn Header="reference" Width="100" DisplayMemberBinding="{Binding Reference}"></GridViewColumn>
                  <GridViewColumn Header="name" Width="100" DisplayMemberBinding="{Binding Name}"></GridViewColumn>
             </GridView>
         </ListView.View>
      </ListView>    

</Grid>

按钮点击事件:

private void ImageButtonClicked(object sender, RoutedEventArgs args)
    {
        ImageWindow imageWindow = new ImageWindow();
        Button btn = args.OriginalSource as Button;

        Image img = (Image) btn.Content;
        imageWindow.ImageToDisplay = img;
        imageWindow.Show();

    }

将显示图像的窗口:

public partial class ImageWindow : Window
{
    public Image ImageToDisplay { get; set; }

    public ImageWindow()
    {

        Imagee.Source = ImageToDisplay.Source;
        InitializeComponent();
        ;
    }
}

当我运行此代码时,我得到一个'System.NullReferenceException';附加信息:对象引用未设置为对象的实例。

在Imagee.Souurce = ImageToDisplay.Source;

任何帮助将不胜感激;提前谢谢。

1 个答案:

答案 0 :(得分:1)

似乎你正在尝试其他方式。在访问窗口或用户控件中的任何控件之前执行InitializeComponent()。属性值在构造函数中不可用,因为它们是在对象构造之后设置的。

public ImageWindow()
{
    InitializeComponent();
    //this line will always have error as ImageToDisplay is set after the constructor
    //Imagee.Source = ImageToDisplay.Source;
}

所以为它创建一个新方法并删除属性ImageToDisplay为不需要的

例如

public SetImage(Image imageToDisplay)
{
    Imagee.Source = imageToDisplay.Source;
}

并像这样打电话

private void ImageButtonClicked(object sender, RoutedEventArgs args)
{
    ImageWindow imageWindow = new ImageWindow();
    Button btn = args.OriginalSource as Button;

    imageWindow.SetImage(img);
    imageWindow.Show();
}

或者如果您只想在新窗口中显示整体图像,您也可以利用内容属性

private void ImageButtonClicked(object sender, RoutedEventArgs args)
{
    ImageWindow imageWindow = new ImageWindow();
    Button btn = args.OriginalSource as Button;

    imageWindow.Content = btn.Content;
    imageWindow.Show();
}

上面的代码只要按钮上有内容设置就可以使用,无论它是什么。