window resize when textbox resize

2020-05-01 08:52发布

问题:

Here is the code for Textbox available in my window(form1.xaml),My requirement is when i am resizing my window i want to resize the textbox width also, How can i able to achieve this....

 <TextBox Width="500" HorizontalAlignment="Left" Margin="5,0,0,5" TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Result,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" IsEnabled="{Binding OpenMode,Converter={StaticResource EnableModeConverter}}" Height="70" />

回答1:

In WPF you typically place TextBox control within layout Grid control and set the ColumnDefinition Width property of that Grid cell to some relative value "*", so it will resize with the Window. Do NOT use a fixed Width="500" as per your sample: also, remove that "HorizontalAlignment="Left" (the default value is HorizontalAlignment="Stretch", so you can just omit it to simplify your XAML). See the following sample code snippet:

<Grid Name="Grid1">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="2*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="4*"/>
    </Grid.RowDefinitions>

    <TextBox Name="TextBox1" Grid.Row="0" Grid.Column="0" Height="70" Margin="5,0,0,5" TextWrapping="Wrap" AcceptsReturn="True" (...Rest of Your code) />
</Grid>

Note: The same technique could be applied to a vertical "Height" property in case you need to make it also resizable.

Hope this will help. Best regards,



回答2:

Set HorizontalAlignment to Stretch, and don't set the Width

<Grid>
    <TextBox HorizontalAlignment="Stretch"
             Margin="5,0,0,5"
             TextWrapping="Wrap"
             AcceptsReturn="True"
             Height="70" />
</Grid>


回答3:

Layout in WPF is heavily depend on the parent container. For example, create a form with labels and input fields, consider using a Grid panel. Controls in WPF by default resize according to the layout behavior of their parent. Here is an example of a window with two labeled text boxes and two buttons that resize along with the window.

   <Window>
      <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <Label Content="Contact Name" Grid.Row="0" Grid.Column="0" />
    <TextBox Grid.Row="0" Grid.Column="1" />

    <Label Content="Contact Location" Grid.Row="1" Grid.Column="0" />
    <TextBox Grid.Row="1" Grid.Column="1" />

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
                VerticalAlignment="Bottom" Grid.Row="2" Grid.Column="1">
        <Button Content="OK" Width="75" Height="24" Margin="3" />
        <Button Content="Cancel" Width="75" Height="24" Margin="3" />
    </StackPanel>

    </Grid>
</Window>


标签: wpf xaml mvvm