设置为根据窗口大小调整文本框大小的任何属性?
答案 0 :(得分:20)
WPF中的布局受父容器的影响很大。例如,如果要创建包含标签和输入字段的表单,请考虑使用“网格”面板。默认情况下,WPF中的控件根据其父级的布局行为调整大小。下面是一个窗口示例,其中包含两个带标签的文本框和两个随窗口一起调整大小的按钮。
<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>
或者,如果您想要类似于浏览器地址栏布局的内容,您可以执行以下操作:
<Window>
<DockPanel>
<DockPanel DockPanel.Dock="Top">
<Button Content="Back" DockPanel.Dock="Left" />
<Button Content="Forward" DockPanel.Dock="Left" />
<Button Content="Refresh" DockPanel.Dock="Right" />
<TextBox /> <!-- fill is assumed for last child -->
<DockPanel>
<StatusBar DockPanel.Dock="Bottom" />
<WebBrowser /> <!-- fill is assumed for last child -->
</DockPanel>
</Window>
请注意,在上面的示例中,我嵌套了两个DockPanel。它也可以通过网格实现,但标记会更加混乱。如果您是WPF新手,我强烈建议您使用各种面板。一旦您了解何时将特定面板应用于特定布局,就可以更轻松地使用WPF。
答案 1 :(得分:3)
有点晚了,但我希望每个人都知道这一点。
要使文本框填满整个窗口并使用它调整大小,您需要将其高度显式设置为自动,即使它是默认值!
答案 2 :(得分:1)
由于几乎没有限制,这可能有点棘手。
我尝试了这个解决方案,让你的宽度限制为父级(我同意也可能有更好的解决方案,但这很容易并且工作正常)
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" Name="LeftColumnDefinition" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Grid.Column="0" BorderThickness="3" VerticalScrollBarVisibility="Auto" HorizontalAlignment="Stretch" ClipToBounds="True"
TextWrapping="Wrap" Width= "{Binding ElementName=LeftColumnDefinition, Path=Width}" MinWidth="560" MinHeight="57" AcceptsTab="True" Foreground="{StaticResource darkBlueBrush}">FIX message... </TextBox>
<Button Margin="2,0,0,0" Grid.Column="1" Content="Publish FIX Message" Name="PublishFIX" Click="publishFix_Click" HorizontalAlignment ="Center" Height="25"/>
</Grid>
所以我唯一的好处是,我将
分类Width =“{Binding ElementName = LeftColumnDefinition,Path = Width}”
到<ColumnDefinition Width="*" Name="LeftColumnDefinition" />
答案 3 :(得分:0)
一种方法是将TextBox的高度和宽度绑定到Window的高度和宽度,例如:
<TextBox Height={Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}, Path=Height} />
可能有一个不同的属性可能要绑定,或者您可能想要使用表达式,因此TextBox不是 父窗口的高度/宽度。很大程度上取决于您的具体使用场景,但这应该足以让您入门。