Helper pro nastavení šířky nejen roztahujících se TextBoxů v Gridu ve WPF


Jak se zbavit problému s roztahováním TextBoxů, které mají proměnlivou šířku uvnitř Gridu?

V aplikacích s hustým a složitým rozložením ovládacích prvků, které nemají nastavené pevné rozměry narazíte na problémy s roztahováním raz dva. Pak se může hodit např. jednoduchý “helper” v podobě skrytého Controlu:

  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition />
      <RowDefinition />
      <RowDefinition />
      <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition />
      <ColumnDefinition />
      <ColumnDefinition />
      <ColumnDefinition />
    </Grid.ColumnDefinitions>

    ...

    <Control Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Name="u_HelpControl" Visibility="Hidden" />

    <TextBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Text="{Binding Text}" 
             MaxWidth="{Binding ActualWidth, ElementName=u_HelpControl}" TextWrapping="Wrap" />

    ...

  </Grid>

Toto řešení je samozřejmě možné použít i pro další WPF ovládací prvky, ale konkrétně u TextBoxu je vhodné použít navíc property TextWrapping s hodnotou Wrap, jinak bude celý text, resp. obsah property Text v jedné řádce…

TIP: pro dosažení vzhledu TextBoxu ala TextArea stačí ještě přidat property AcceptsReturn pro možnost odřádkování a VerticalScrollBarVisibility pro zobrazení ScrollBaru:

    <TextBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Text="{Binding Text}" 
             MaxWidth="{Binding ActualWidth, ElementName=u_HelpControl}" 
             TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" 
             MinWidth="200" MinHeight="50" />

, , , ,

Komentáře jsou uzavřeny.