2016-03-29 16 views
1

Angesichts einer wirklich grundlegenden Grid, mit ColumnDefinition 's Breite auf * festgelegt, die hardcoded Breite Attribut der Taste enthalten in enthalten sind ignoriert und diese Kind Elemente sind abgeschnitten. Sie sind nicht mit einer Breite beschnitten, die auf Auto eingestellt ist.Grid ignoriert ClipToBounds in WPF

Dieses Clipping wird verhindert, wenn MinWidth s korrekt auf jedem ColumnDefinition gesetzt sind, aber das ist nicht genau dynamisch.

Mache ich Dinge falsch oder ist dies das beste was WPF zu bieten hat?

enter image description here

wird

enter image description here

Markup:

<Grid ShowGridLines="True" ClipToBounds="False"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition></ColumnDefinition> 
      <ColumnDefinition></ColumnDefinition> 
      <ColumnDefinition></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
      <Button Grid.Column="0" Width="120">AAAAA</Button> 
      <Button Grid.Column="1" Width="120">BBBB</Button> 
      <Button Grid.Column="2" Width="120">CCCCC</Button> 
    </Grid> 

Ich würde die Tasten wie nach dem ersten Bild erscheinen, wenn es Raum, und als Bild drei, wenn es gibt keine (dh unter keinen Umständen Clipping).

enter image description here

+0

Können Sie ein Diagramm für das hinzufügen, was bei minimiertem Fenster geschehen soll? Sind die Buttons immer 120 breit oder willst du mit der Fenstergröße verkleinern? thx – SWilko

+0

@SWilko aktualisierte Frage – maxp

Antwort

1

Ahh ich es gelöst haben, wie folgt:

Der Schlüssel ist die MinWidth Attribut im ColumnDefinition.

<Grid ShowGridLines="True"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition MinWidth="{Binding Path=ActualWidth, ElementName=spLeft }"></ColumnDefinition> 
      <ColumnDefinition MinWidth="{Binding Path=ActualWidth, ElementName=spMid }"></ColumnDefinition> 
      <ColumnDefinition MinWidth="{Binding Path=ActualWidth, ElementName=spRight }"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <StackPanel Background="Red" Grid.Column="0" Name="spLeft" HorizontalAlignment="Center"> 
      <Button Width="120">AAAAA</Button> 
     </StackPanel> 
     <StackPanel Background="Green" HorizontalAlignment="Center" Grid.Column="1" Name="spMid"> 
      <Button Width="120">BBBB</Button> 
     </StackPanel> 
     <StackPanel Background="Blue" Name="spRight" Grid.Column="2" HorizontalAlignment="Center"> 
      <Button Width="120">CCCCC</Button> 
     </StackPanel> 
    </Grid> 
0

Nur eine MinWidth zum Grid hinzu:

<Grid ShowGridLines="True" ClipToBounds="False" MinWidth="360"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition></ColumnDefinition> 
     <ColumnDefinition></ColumnDefinition> 
     <ColumnDefinition></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
     <Button Grid.Column="0" Width="120">AAAAA</Button> 
     <Button Grid.Column="1" Width="120">BBBB</Button> 
     <Button Grid.Column="2" Width="120">CCCCC</Button> 
</Grid> 
+0

Hallo Arnaud, danke für die Antwort. Ich war auf der Suche nach einem dynamischen Ansatz, bei dem ich keine wörtliche "Mindestbreite" fest codieren musste. Siehe meine Antwort für diese Lösung. – maxp

+0

Hallo Maxp, technisch ist dies eine richtige Antwort auf Ihre Frage, obwohl ich verstehen kann, dass Sie etwas wollten, das Sie nicht ausgedrückt haben. Plus sowieso MinWidth ist die Antwort. –