2017-03-01 51 views
0

我有简单的wpf应用程序,它由2个窗口组成:MainMenu和PictureWindow。 在MainMenu的我有click事件一个按钮,打开图片窗口:c# - wpf - 在窗口切换之间刷新图片

private void btnOpenPicWindow_Click(object sender, RoutedEventArgs e) 
{ 
    var picWindow = new PictureWindow(); 
    Application.Current.MainWindow = picWindow; 
    Close(); 
    picWindow.Show(); 
} 

在PictureWindow我WindowsFormsHostPictureBox。在PictureWindow中,我收到从另一个应用程序发送的图像,并在PictureBox上显示。 PictureWindow还与click事件的按钮可以追溯到MainMenu的是这样的:

private void btnBack_Click(object sender, RoutedEventArgs e) 
{ 
    var mMenu = new MainWindow(); 
    System.Windows.Application.Current.MainWindow = mMenu; 
    Close(); 
    mMenu.Show(); 
} 

一切正常,当我打开主窗口,然后PictureWindow。问题是,当我从PictureWindow返回到MainMenu,然后再次到PictureWindow,并且如果我发送图片到我的PictureBox它不会刷新。我收到的图像,因为我在debbuging中看到它,但我的PictureBox是空白的。

回答

0

每次单击MainWindow上的按钮时,都应该尝试用图片重新初始化窗口。

如果您想要使用异步或同步方法加载图像,您可以将LoadAsync更改为Load

WPF PictureWindow:

<Window x:Class="WpfApplication2.PictureWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="PictureWindow" Height="300" Width="300" 
     xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" Loaded="Window_Loaded"> 
    <Grid> 
     <WindowsFormsHost Height="100" HorizontalAlignment="Left" Margin="12,12,0,0" Name="windowsFormsHost1" VerticalAlignment="Top" Width="200"> 
      <wf:PictureBox x:Name="pbImage" SizeMode="AutoSize"></wf:PictureBox> 
     </WindowsFormsHost> 
    </Grid> 
</Window> 

C#PictureWindow:

public partial class PictureWindow : Window 
{ 
    public string imgsrc = string.Empty; 
    public PictureWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     pbImage.LoadAsync(imgsrc); 
    } 
} 

C#主窗口:

public partial class MainWindow : Window 
{ 
    PictureWindow window; 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
} 
private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    window = new PictureWindow(); 
    window.imgsrc = textBox1.Text.Trim(); //Here you update your "Source" for your image. 
    window.Show(); 
}