2016-11-03 1 views
2

Ich habe eine Anwendung, wo das gesamte Fenster skaliert wird, wenn ein Benutzer die Größe des Fensters ändert. Dies ist der Code, dies zu tun:ScaleTransform skaliert ContextMenu teilweise

ContentDesktop.LayoutTransform = new ScaleTransform(scale, scale); 

Jetzt brauchte ich einen Button mit einem ContextMenu, und das Menü soll als das Anwendungsfenster skalieren. Um dies zu tun, gebunden ich die Render des ContextMenu auf die Scaletransform des Button:

<Button.RenderTransform> 
     <ScaleTransform ScaleX="{Binding ScaleFactor}" ScaleY="{Binding ScaleFactor}"/> 
    </Button.RenderTransform> 
    <Button.ContextMenu> 
     <ContextMenu RenderTransform="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.RenderTransform}"> 
      <MenuItem Header="Item 1"/> 
      <MenuItem Header="Item 2 wwww aaaa ssss iiii"/> 
     </ContextMenu> 
    </Button.ContextMenu> 

Der Text des MenuItems jetzt skaliert, aber für größere Skalierungsfaktoren (> 1.2) nur einen Teil des ContextMenu gezeigt . Der rechte und der untere Teil fehlen. Als ob jemand es abschneiden würde. Aber wenn ich die Größe (Breite, Höhe) überprüfe, ist das ContextMenu größer als gemalt.

Jemand hat eine Idee, was das sein könnte?

Antwort

2

Versuchen

<ContextMenu LayoutTransform="{Binding ...}"> 

Layout: Eine Transformation, die vor dem Layout Pass angewendet wird. So wird die FrameworkElement im größeren Schema neu angeordnet.

RenderTransform: Eine Transformation, die nach Abschluss des Layoutdurchlaufs angewendet wird. Die ContextMenu Spawns eine neue Window, aber es sind Grenzen von vor der Transformation bleiben und das visuelle abgeschnitten.