Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用包装控件填充宽度?_C#_Wpf - Fatal编程技术网

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巫师的袖子里还有魔法在等着我。