2017-01-31 1 views
0

Ich habe ein Steuerelement, das ich zu einem Bild bin Umwandlung unter Verwendung des Verfahren hier:WPF XAML Steuerung in ein Bild umgewandelt hat falsches Layout

Force rendering of a WPF control in memory

Leider habe ich ein komplexes Layout und es scheint, dass eine Steuer "Collapsed" wird im Ausgabebild nicht korrekt ausgeblendet.

Versuchte:

  • Anruf UpdateLayout mehrfach
  • Größe ändern der Kontrolle durch 1 Pixel
  • eine ViewBox Mit

Es scheint DockPanel zu beeinflussen, wenn etwas nach unten ausgerichtet ist, und mit einem Konverter versteckt.

<DockPanel LastChildFill=True> 
    <Something Dock.Panel="Top" /> 
    <Something Dock.Panel="Bottom" Binding="{Binding XXXXX, Converter={StaticResource booleanConverter}}"/> 
    <Something Dock.Panel="Bottom" Binding="{Binding YYYYY, Converter={StaticResource booleanConverter}}"/> 
    <Something /> 
</DockPanel> 

Alles wird gut im Xaml-Editor angezeigt, oder wenn es zur Laufzeit in einem echten sichtbaren Steuerelement verwendet wird.

Antwort

0

Am Ende musste ich einen Trigger verwenden, um die Höhe auf Null zu setzen statt Collapsed auf die Elemente anzuwenden. Dies bedeutet natürlich, dass alle Ränder in Padding konvertiert werden müssen, bei Bedarf mit verschachtelten Panels.

In diesem Fall hatte ich eine Grenzkontrolle - also musste ich die Visibility-Eigenschaft entfernen und stattdessen diesen Trigger verwenden.

<Border> 
     <Border.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding XXXXX, Converter={StaticResource booleanConverter}}" Value="true"> 
         <Setter Property="Border.Height" Value="0" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Border.Style> 
    </Border>