2016-05-01 9 views
0

Ich versuche ein stilvolles Fenster mit Icon in der oberen rechten Ecke zu erstellen, das teilweise außerhalb der Fenstergrenze liegt. Da dies nicht direkt möglich ist (Inhalt, der außerhalb des Fensters fällt, wird abgeschnitten), verwende ich ein Popup Steuerelement dafür.Popup ist kein richtiges Kind seines übergeordneten Fensters?

<Popup Placement="Right" HorizontalOffset="-80" VerticalOffset="-40" IsOpen="True" AllowsTransparency="True" 
     PlacementTarget="{Binding RelativeSource={RelativeSource AncestorType=Grid}}"> 
    <Image Source="pack://application:,,,/graphics/AdminIcon.png" Stretch="None" /> 
</Popup> 

Es funktioniert gut, solange ich nicht zwischen Fenstern wechseln. Daraufhin sieht es so aus, als wäre das Popup weder ein richtiges Kind des Window, noch ein völlig separates eigenes Fenster; etwas dazwischen.

Ich werde versuchen, es mit zwei Bildern zu erklären:

Bild1: Fenster geladen und Pop-up zeigt gut in der rechten oberen Ecke:

Image1: Window loaded

Bild2: ALT + TAB: Notizblock injiziert sich irgendwie zwischen Popup und Fenster

Image2: Notepad between popup and window

Wie löse ich dieses Problem?

Antwort

1

Statt eines Popup Sie eine randlose, transparente Fenster verwenden:

<Window ... 
    WindowStyle="None" AllowsTransparency="True" Background="{x:Null}" 
    MouseLeftButtonDown="Window_MouseLeftButtonDown"> 
    <Grid> 
     <Grid Margin="0,20,0,0" Background="White"> 
      ... window content goes here  
     </Grid> 
     <Image 
      Source="/graphics/AdminIcon.png" Stretch="None" 
      HorizontalAlignment="Right" VerticalAlignment="Top" /> 

    </Grid> 
</Window> 

mit diesem MouseLeftButtonDown Handler

private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    DragMove(); 
} 

und vielleicht ein Schließen-Button irgendwo.

+0

Nicht sicher, ob ich dich richtig verstanden habe. Schlägst du vor, dass ich dieses "Fenster" anstelle meines "Popups" benutze? Wie lege ich es in das Hauptfenster? durch Code? Warum brauche ich den 'MouseLeftButtonDown' Handler? (Hauptfenster ist nicht beweglich oder in der Größe veränderbar). – dotNET

+0

Nein, mein Vorschlag ist, Ihr "Elternfenster" grenzenlos und transparent zu machen. Wenn Sie einen oberen Rand im inneren Raster festlegen, wird der Inhalt des nicht transparenten Fensters nach unten verschoben, um das Symbol vom Hintergrund zu trennen. – Clemens

+0

aaaaaah. Das könnte ein netter Trick sein, um es zu lösen. – dotNET

Verwandte Themen