2016-04-17 9 views
0

Wie konnte ich die Breite der ersten Spalte gleich die Breite des Gitters minus der Breite der zweiten Spalte in XAML? Ich muss dies tun, weil ich einen Brauch TextBox mit einem Bleistift machen werde.Set Breite der ersten Spalte gleich das Gitters Breite minus zweiter Spalte in XAML

Der Code in meinem Ressourcenwörterbuch (am Ende meiner Frage) gibt mir dieses Ergebnis, wo ich einige Fälle hinzufügen. Die ersten vier sind, wie die TextBox für diesen Moment ist. Der letzte ist, wie ich möchte, wie die TextBox aussehen muss. Beachten Sie, dass dies vorübergehend gelöst wird, indem Sie den Text auf viele Leerzeichen setzen.

(auf das Bild klicken Vollbild zu sehen)

Hier sehen Sie den Code für Bild oben:

<TextBox Grid.Row="0" Margin="5" Text=""/> 
<TextBox Grid.Row="1" Margin="5" Text="Plop"/> 
<TextBox Grid.Row="2" Margin="5" Text="Ploperdeplop"/> 
<TextBox Grid.Row="3" Margin="5" Text="Ploperdeploperdeploperdeplop"/> 
<TextBox Grid.Row="4" Margin="5" Text="            "> 

Beachten Sie auch, dass die erste Spalte in ControlTemplate unten Strecke sein muss über dem Loch Grid. Wenn die ControlTemplate hat eine Breite von 150 Pixel und die zweite Spalte (Spalte mit dem Bleistift) 50px ist, die erste Spalte (Spalte mit den TextBox) muss eine Breite von 100 Pixel aufweisen. Wenn das Raster 300 Pixel groß ist und die zweite Spalte wieder gleich (50 Pixel) ist, muss die erste Spalte 250 Pixel breit sein.

Hier haben Sie einen Teil meines Ressourcenwörterbuchs.

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="Foreground" Value="#FF333333"/> 
    <Setter Property="Background" Value="White"/> 
    <Setter Property="Padding" Value="5"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBox}"> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"> 
        <VisualStateManager.VisualStateGroups...> 

        <Grid x:Name="grdRoot" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="Stretch"> 

         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> <!-- this column (index zero) must have a width of the width of the grid minus the second column (index one)--> 
          <ColumnDefinition Width="auto"/> 
         </Grid.ColumnDefinitions> 

         <TextBox x:Name="txbText" Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBox}}, Path=Text}" Style="{x:Null}" BorderBrush="{x:Null}" 
           Grid.Column="0" Focusable="{TemplateBinding Focusable}" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch"/> 

         <Button x:Name="btnPencil" Grid.Column="1" Focusable="False" HorizontalAlignment="Left" Margin="3,0,3,0" Grid.Row="0" VerticalAlignment="Top" Width="20"> 
          <Button.Content> 
           <fa:ImageAwesome Icon="Pencil"/> 
          </Button.Content> 
         </Button> 

        </Grid> 
       </Border> 
       <ControlTemplate.Triggers...> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

(... im Code bedeutet, dass der Abschnitt kollabiert ist)

+1

'Horizontal = "Stretch"' für 'grdRoot' sollte die gewünschte Wirkung – ASh

+0

@ASh geben: Danke für deinen Kommentar, es hilft mir :) –

Antwort

3

grdRoot Horizontal an TextBox gebunden Horizontalcontentalignment die standardmäßig verlassen wird. Ändern Horizontal Stretch gewünschte Wirkung

<Grid x:Name="grdRoot" 
HorizontalAlignment="Stretch" 
VerticalAlignment="Stretch"> 

Ich würde später zu bekommen Horizontalcontentalignment gelten, für txbText Element

<TextBox x:Name="txbText" 
     HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" ... 
0

durch einen Kommentar von @ASh ich durch meine Frage gelöst haben HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"-HorizontalAlignment="Strech" für grdRoot ändern.

Verwandte Themen