当用户更改对话框大小时,如何设置 wpf 文本框自动调整大小?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28055371/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 12:52:02  来源:igfitidea点击:

How do I set a wpf text box to resize automatically when the user changes the size of dialog box?

c#wpf

提问by ttom

How do I set a wpf text box to resize automatically when the user changes the size of dialog box?

当用户更改对话框大小时,如何设置 wpf 文本框自动调整大小?

 <Window x:Class="MemoPad.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Background="LightGray" 
    Title="Window1" Height="350" Width="700" >
<StackPanel Orientation="Vertical">
    <Menu DockPanel.Dock ="Right">
        <MenuItem Header="Find" x:Name="gMNuFind" />
    </Menu>
    <Button Content=" Find " 
          Margin="5,10,5,5"
          x:Name="gBuFind" 
          />
    <TextBox Margin="0,0,0,0"
          HorizontalAlignment="Left"
          VerticalAlignment="Top" 
          MinHeight="270" MinWidth="690"                  
          x:Name = "gTBxInfo" 
          TextWrapping="Wrap"
          AcceptsReturn="True"
          ScrollViewer.VerticalScrollBarVisibility="Auto" 
          />
</StackPanel>

采纳答案by rraszewski

Or change StackPanel to Grid

或将 StackPanel 更改为 Grid

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Background="LightGray" 
    Title="Window1" Height="350" Width="700" >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition Height="auto" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
        <Menu>
            <MenuItem Header="Find" x:Name="gMNuFind" />
        </Menu>
        <Button Grid.Row="1" Content=" Find " 
          Margin="5,10,5,5"
          x:Name="gBuFind" 
          />
        <TextBox Grid.Row="2" Margin="0,0,0,0"
          HorizontalAlignment="Stretch"
          VerticalAlignment="Stretch" 
          MinHeight="270" MinWidth="690"                  
          x:Name = "gTBxInfo" 
          TextWrapping="Wrap"
          AcceptsReturn="True"
          ScrollViewer.VerticalScrollBarVisibility="Auto" 
          />
    </Grid>
</Window>

回答by d.moncada

Remove MinHeightand MinWidthfrom the TextBox, and change HorizonalAlignmentto Stretch

删除MinHeightMinWidthTextBox,并改变HorizonalAlignmentStretch

<TextBox Margin="0,0,0,0"
  HorizontalAlignment="Stretch"
  VerticalAlignment="Top"               
  x:Name = "gTBxInfo" 
  TextWrapping="Wrap"
  AcceptsReturn="True"
  ScrollViewer.VerticalScrollBarVisibility="Auto" />

Edit:

编辑:

If you want to resize the TextBoxin both directions (horizontally and vertically), you would have to use a different container other than StackPanel, so that the TextBoxsizing is independent.

如果要TextBox在两个方向(水平和垂直)调整 的大小,则必须使用 以外的其他容器StackPanel,以便TextBox调整大小是独立的。

Something like this:

像这样的东西:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="50"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Menu>
        <MenuItem Header="Find" x:Name="gMNuFind" Grid.Row="0"/>
    </Menu>
    <Button x:Name="gBuFind" 
            Content=" Find " 
            Margin="5,10,5,5"     
            Grid.Row="1"/>
    <TextBox x:Name = "gTBxInfo" 
             Margin="0,0,0,0"
             HorizontalAlignment="Stretch"
             VerticalAlignment="Stretch"               
             TextWrapping="Wrap"
             AcceptsReturn="True"
             ScrollViewer.VerticalScrollBarVisibility="Auto" 
             Grid.Row="2"/>
</Grid>