2017-03-01 2 views
0

Ich habe einfache wpf app, die aus 2 Fenstern bestehen: MainMenu und PictureWindow. In MainMenu habe ich eine Taste mit der Click-Ereignis, das Bildfenster öffnet sich:C# - wpf - Bild zwischen Fensterwechsel aktualisieren

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

In PictureWindow Ich habe WindowsFormsHost mit PictureBox. In PictureWindow erhalte ich ein Bild, das ich aus einer anderen App sende, und ich zeige es auf PictureBox. PictureWindow hat auch eine Taste mit Click-Ereignisse, die wie folgt zu MainMenu geht zurück:

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

Alles ist in Ordnung, wenn ich Mainwindow öffnen und dann PictureWindow. Das Problem ist, wenn ich von PictureWindow zu MainMenu und dann noch einmal zu PictureWindow gehe und wenn ich Bild an meine PictureBox sende, wird es nicht aktualisiert. Ich erhalte das Bild, weil ich es beim Debuggen sehe, aber mein PictureBox ist leer.

Antwort

0

Sie sollten versuchen, Ihr Fenster mit Ihrem Bild jedes Mal neu zu initialisieren, wenn Sie auf die Schaltfläche auf Ihrem MainWindow klicken.

Sie können LoadAsync für Load ändern, wenn Sie Ihr Bild mit einer asynchronen oder synchronen Methode laden möchten.

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# Mainwindow:

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(); 
}