2016-05-26 7 views
0

Es gibt viel Code. Aber Problem ist da: Ich habe eine Listbox mit Control als Datatemplate bekam:WPF Hauptfenster ist immer über anderen Fenstern

<ListBox x:Name="UpcomingConcertsList" ItemsSource="{Binding UpcomingConcerts}" HorizontalAlignment="Left" Height="350" Margin="10,208,0,0" VerticalAlignment="Top" Width="370"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Control MouseDoubleClick="UpcomingConcert_DoubleClick"> 
        <Control.Template> 
         <ControlTemplate> 
          <Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="4" Width="320"> 
           <Grid Margin="3"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="100"/> 
             <ColumnDefinition/> 
            </Grid.ColumnDefinitions> 
            <Image Grid.RowSpan="2" Width="100" Height="75" Margin="6" Source="{Binding ImageURL}"/> 
            <StackPanel Grid.Column="1" Margin="2,6"> 
             <TextBlock FontWeight="Bold" Text="{Binding Name}"/> 
             <TextBlock Text="{Binding Date, StringFormat={}{0:g}}"/> 
             <TextBlock Text="{Binding Bands, Converter={StaticResource BandsConverter}}"/> 
            </StackPanel> 
           </Grid> 
          </Border> 
         </ControlTemplate> 
        </Control.Template> 
       </Control> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

und Ereigniscode klicken hinter:

private void Concert_DoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     Control control = sender as Control; 
     Concert concert = control.DataContext as Concert; 

     ConcertView wndw = new ConcertView(concert.ConcertID); 

     wndw.Show(); 
    } 

Und ConcertView Fenster geöffnet wird, aber nur unter meinem Mainwindow. wndw.Activate(), wndw.Focus() hilft nicht. Ich habe versucht, dies zu tun.IsEnabled = false und wndw.Show() danach. Dann war mein ConcertView über MainWindow. Aber da dies.IsEnabled wahr wird, geht ConcertView plötzlich unter.

Gibt es Ideen?

+0

Haben Sie versucht, 'wndw.TopMost = true;' ?? – ViVi

+0

@ vishakh369 Ja, ich habe es versucht. Natürlich bekommt meine WNDW über alle Fenster. Aber TopMost macht mein Fenster über alle Anwendungen. Aber ich brauche nur mein ConcertView um über MainWindow zu erscheinen. Ich versuchte auch wndw.TopMost = true und wndw.TopMost = false nach Thread.Sleep (x) (Schlaf ist nur um zu überprüfen, ob es richtig funktioniert) - so meine wndw bekam Top und danach unter MainWindow – utkillr

+0

Ich posten meine Antwort als Antwort, da es zu lang ist und Code enthält. Wie auch immer ich denke, es sollte funktionieren. – ViVi

Antwort

0

Aber TopMost macht mein Fenster über alle Anwendungen Was meinst du damit? Sie verwenden gerade eine Anwendung und wenn Sie auf eine Schaltfläche klicken, wird ein neues Fenster geladen. Du willst also, dass das neue Fenster oben rechts ist?

Sie können die Owner Eigenschaft eines Fensters setzen, um seinen Besitzer festzulegen. dh die MainWindow. Wenn Sie dieses festlegen, wird das aktuelle Fenster Besitzerfenster sein.

Window ownedWindow = new Window(); 
ownedWindow.Owner = this; 
ownedWindow.Show(); 

versuchen nun die wndw.TopMost = true; Einstellung und prüfen, ob seine Arbeiten.