2016-04-17 10 views
0

最初の列の幅をグリッドの幅からXAMLの2番目の列の幅を引いた値に設定するにはどうすればよいですか?私は鉛筆で飾るTextBoxを作っているので、これを行う必要があります。最初の列の幅をグリッドの幅とxamlの2番目の列を等しく設定する

私のリソース辞書のコード(私の質問の一番下にある)は私にこの結果を与えてくれます。最初の4つは、この瞬間にTextBoxがどのようになっているかです。最後の1つは、どうすればTextBoxのように見えるかです。これは、テキストをロットの空白に等しく設定することで一時的に解決されることに注意してください。 ControlTemplateの最初の列は、以下のストレッチでなければならないことも

<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="            "> 

注:

ここ

あなたは上の画像のコードを参照してください(フルスクリーンで見るには画像をクリックしてください)穴の上にGridControlTemplateは、150ピクセルの幅及び第二カラム(鉛筆を持つ列)を有する場合では50pxであり、最初の列TextBox持つ列)は100pxに幅を持たなければなりません。グリッドが300ピクセルで、2列目が同じ場合(50ピクセル)の場合、最初の列は250ピクセル幅でなければなりません。

ここでは、私のリソース辞書の一部です。

<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> 

私はgrdRootためHorizontalAlignment="Strech"HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"を変更することで、私の質問を解決してきました@AShからのコメントでは

+1

'たHorizo​​ntalAlignment = "ストレッチ"' grdRoot'は、所望の効果に – ASh

+0

@AShを与える必要があります 'のために:あなたのコメントのおかげで、それは私に役立ちます:) –

答えて

3

grdRootたHorizo​​ntalAlignmentはデフォルトで左されるテキストボックスHorizo​​ntalContentAlignmentにバインドされています。変更たHorizo​​ntalAlignmentは、所望の効果に

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

を取得するために伸ばして、私はtxbText要素のために、後でHorizo​​ntalContentAlignmentを適用する

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

を(コード中...はセクションが折りたたまれていることを意味します)。

関連する問題