在 Border, WPF 中的 Stackpanel 中使文本框宽度自动更改
Make textbox width automatically changable in Stackpanel which is in Border, WPF
我想把 Button
放在 TextBox
中,但我发现这是不可能的,所以我决定这样做:
Xaml 看起来如下所示:
<Border Grid.Row="4" Grid.Column="2" Margin="10,0,10,0"
BorderBrush="Gray" BorderThickness="1">
<StackPanel Orientation="Horizontal" Margin="0,0,0,0">
<TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}"
Width="245"/>
<Button Content="*" Width="15" BorderThickness="1"/>
</StackPanel>
</Border>
我遇到的问题是,当我调整 window(减小宽度)大小时,我的 Button
消失了:
我希望它表现得像 DateTimePicker
那样。我尝试了很多方法来使 TextBox
宽度自动调整(*
宽度输入不正确,auto
减小 TextBox
的宽度,我还尝试定义样式资源在 StackPanel
资源中 TextBox
宽度,但它也不起作用),但还没有找到正确的方法。
将 StackPanel
替换为 Grid
:
<Border Margin="10,0,10,0" BorderBrush="Gray" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" />
<Button Grid.Column="1" Content="*" Width="15" BorderThickness="1"/>
</Grid>
</Border>
使用 Grid 而不是 StackPanel。设置固定大小 (Width/Height) 不是自适应布局的好主意。 Grid 将允许 TextBox 伸展。
一个选项是为 TextBox 和 Button 设置单独的列:
<Border Grid.Row="4" Grid.Column="2" Margin="10,0,10,0"
BorderBrush="Gray" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" />
<Button Content="*" Grid.Column="1" Width="15" BorderThickness="1"/>
</Grid>
</Border>
或者将它们放在同一个单元格中,让 Button 与 TextBox 重叠(它看起来像是 TextBox 的一部分,但可以隐藏部分长文本):
<Border Grid.Row="4" Grid.Column="2" Margin="10,0,10,0"
BorderBrush="Gray" BorderThickness="1">
<Grid>
<TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" />
<Button Content="*" HorizontalAlignment="Right" Margin="2" Width="15" BorderThickness="1"/>
</Grid>
</Border>
我想把 Button
放在 TextBox
中,但我发现这是不可能的,所以我决定这样做:
Xaml 看起来如下所示:
<Border Grid.Row="4" Grid.Column="2" Margin="10,0,10,0"
BorderBrush="Gray" BorderThickness="1">
<StackPanel Orientation="Horizontal" Margin="0,0,0,0">
<TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}"
Width="245"/>
<Button Content="*" Width="15" BorderThickness="1"/>
</StackPanel>
</Border>
我遇到的问题是,当我调整 window(减小宽度)大小时,我的 Button
消失了:
我希望它表现得像 DateTimePicker
那样。我尝试了很多方法来使 TextBox
宽度自动调整(*
宽度输入不正确,auto
减小 TextBox
的宽度,我还尝试定义样式资源在 StackPanel
资源中 TextBox
宽度,但它也不起作用),但还没有找到正确的方法。
将 StackPanel
替换为 Grid
:
<Border Margin="10,0,10,0" BorderBrush="Gray" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" />
<Button Grid.Column="1" Content="*" Width="15" BorderThickness="1"/>
</Grid>
</Border>
使用 Grid 而不是 StackPanel。设置固定大小 (Width/Height) 不是自适应布局的好主意。 Grid 将允许 TextBox 伸展。
一个选项是为 TextBox 和 Button 设置单独的列:
<Border Grid.Row="4" Grid.Column="2" Margin="10,0,10,0"
BorderBrush="Gray" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" />
<Button Content="*" Grid.Column="1" Width="15" BorderThickness="1"/>
</Grid>
</Border>
或者将它们放在同一个单元格中,让 Button 与 TextBox 重叠(它看起来像是 TextBox 的一部分,但可以隐藏部分长文本):
<Border Grid.Row="4" Grid.Column="2" Margin="10,0,10,0"
BorderBrush="Gray" BorderThickness="1">
<Grid>
<TextBox BorderBrush="LightGray" BorderThickness="1" Text="{Binding WaybillNumber}" />
<Button Content="*" HorizontalAlignment="Right" Margin="2" Width="15" BorderThickness="1"/>
</Grid>
</Border>