C# 如何使用包装控件填充宽度?
为了减少屏幕不动产的浪费,我使用了C# 如何使用包装控件填充宽度?,c#,wpf,C#,Wpf,为了减少屏幕不动产的浪费,我使用了StackPanel将标签与其相应的文本框耦合两次,然后将它们包装在包装内。(在本例中,我仅指分支和电话控件。) 当屏幕足够大时,两个StackPanel控件并排排列,并填充必要的宽度: 当屏幕缩小时,两个StackPanel控件正确包装,但在右侧留下空白: 下面是xaml的总结,以完成我迄今为止的工作。切勿使用验证TextBoxStyle,因为它只会影响红色轮廓和错误工具提示 <WrapPanel VerticalAlignment="Str
StackPanel
将标签
与其相应的文本框
耦合两次,然后将它们包装在包装内。(在本例中,我仅指分支
和电话
控件。)
当屏幕足够大时,两个StackPanel
控件并排排列,并填充必要的宽度:
当屏幕缩小时,两个StackPanel
控件正确包装,但在右侧留下空白:
下面是xaml的总结,以完成我迄今为止的工作。切勿使用验证TextBoxStyle
,因为它只会影响红色轮廓和错误工具提示
<WrapPanel
VerticalAlignment="Stretch"
Margin="0">
<StackPanel Orientation="Horizontal">
<Label
Content="Branch"
Margin="5,3"
Width="40"/>
<TextBox
x:Name="textBox"
Height="24"
Margin="5,0,5,5"
Style="{StaticResource validatingTextBoxStyle}"
Text="{Binding BranchNumber, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
MinWidth="150"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label
Content="Phone"
Margin="5,3"
Width="40"/>
<TextBox
x:Name="phone"
TabIndex="2"
Height="24"
Margin="5,0,5,5"
Style="{StaticResource validatingTextBoxStyle}"
Text="{Binding PhoneNumberToSearch, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
MinWidth="150"/>
</StackPanel>
</WrapPanel>
我尝试使用ColumnDefinitions
添加一个Grid
层,以调整两个StackPanel
控件的大小,但这否定了包装功能。我尝试将他们的水平对齐
设置为拉伸
,但没有看到任何变化。我也在上研究了类似的问题,但是UniformGrid
不适合这种情况
进一步调查后,我注意到StackPanel
控件并没有像我想象的那样伸展,当添加背景色时,如下所述:
是否有一种方法可以在包装这些控件后拉伸它们以填充剩余的宽度?如果要控制列的宽度,请使用网格而不是包装。例如,这将使标签宽度为70,文本框填充剩余空间:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
</Grid.RowDefinitions>
<Label Content="Branch" Grid.Column="0" Grid.Row="0"/>
<TextBox x:Name="branchTextBox" Grid.Column="1" Grid.Row="0"/>
<Label Content="Phone" Grid.Column="0" Grid.Row="1"/>
<TextBox x:Name="phoneTextBox" Grid.Column="1" Grid.Row="1"/>
</Grid>
我认为没有简单的方法可以做到这一点。。。WrapPanel说“根据孩子们想要的大小绘制孩子们,并将他们放置到其中一个被剪掉,然后包裹到一条新线”,所以孩子们的大小将始终是他们指定的大小。我认为您最好切换到网格,并使用转换器或触发器设置项的Grid.Row/Grid.Column。。。若两个项目的宽度大于网格的宽度,则放在第二行,或放在scrollviewer中,若滚动条可见,则放在单独的行中。我不知道最好的方法是什么。@Rachel我担心情况会是这样。我只希望另一个WPF巫师的袖子里还有魔法在等着我。