C# WPF:我如何在DockPanel中伸展中间的孩子?

C# WPF:我如何在DockPanel中伸展中间的孩子?,c#,wpf,xaml,textbox,dockpanel,C#,Wpf,Xaml,Textbox,Dockpanel,我向RadioButton元素添加了DockPanel,这样我就可以使用100%的宽度水平分布单选按钮标签、文本框和按钮 在DockPanel中使用LastChildFill=“True”拉伸最后一个元素。如果textbox是面板中的最后一个子项,那么这一点很好地解决了。但是,由于按钮是最后一个元素,并且具有固定的宽度,因此文本框应该被拉伸。但是,没有像2ndChildFill=“True”这样的属性 我的代码如下所示: 地点: 路径字符串 ... 它给了我这个: 有什么想法和提示来解决这

我向RadioButton元素添加了DockPanel,这样我就可以使用100%的宽度水平分布单选按钮标签、文本框和按钮

在DockPanel中使用
LastChildFill=“True”
拉伸最后一个元素。如果textbox是面板中的最后一个子项,那么这一点很好地解决了。但是,由于按钮是最后一个元素,并且具有固定的宽度,因此文本框应该被拉伸。但是,没有像
2ndChildFill=“True”
这样的属性

我的代码如下所示:


地点:
路径字符串
...
它给了我这个:

有什么想法和提示来解决这个问题吗?非常感谢…

您需要为元素设置附加属性,并将
文本框
保留为最后一个元素:

<RadioButton HorizontalAlignment="Stretch"
             HorizontalContentAlignment="Stretch">
    <DockPanel LastChildFill="True">
        <TextBlock DockPanel.Dock="Left"
                   VerticalAlignment="Center"
                   Text="in location:" />
        <Button DockPanel.Dock="Right"
                Margin="10,0,0,0"
                Padding="3,0"
                Content="..." />
        <TextBox Margin="10,0,0,0">
            Path string
        </TextBox>
    </DockPanel>
</RadioButton>

路径字符串

公认的答案是解决您的问题,但会产生另一个问题。如果有人使用键盘(
选项卡
)在您的界面中导航,
按钮
将集中在
文本框
之前。从长远来看,这可能会很烦人。如果您不想中断选项卡顺序,请使用
Grid
而不是
DockPanel

<RadioButton HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" VerticalAlignment="Center">in location:</TextBlock>
        <TextBox Grid.Column="1" Margin="10,0,0,0">Path string</TextBox>
        <Button Grid.Column="2" HorizontalAlignment="Right" Margin="10,0,0,0" Padding="3,0">...</Button>
    </Grid>
</RadioButton>

你为什么不改用网格呢?网格中有3列,第二列设置为*width,其他列设置为autoYeah,这样可以工作。但在我看来,这似乎有点过度设计。DockPanel解决方案不是更优雅一点吗?它不需要所有这些列的定义。问题的标题提到了“中间”,而答案将其移到了“最后”。那么为什么没有更好的答案呢?因为DOCKPosik.Kutt属性,文本框仍然会出现在中间。将其移动到XML文档中的最后一个位置只会使WPF授予控件父控件的全部剩余空间!由于WPF按照xaml中的顺序分配默认选项卡索引,因此最好不要移动元素。为了澄清,
DockPanel
有一个属性
LastChildFill
,当设置为true时,将扩展最后一个元素以填充容器的其余部分。我认为这的默认值是
True
(但如果需要,可以将其设置为True explicity)。
<RadioButton HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" TabIndex="0">
    <DockPanel LastChildFill="True">
        <TextBlock DockPanel.Dock="Left" VerticalAlignment="Center" Text="in location:" />
        <Button DockPanel.Dock="Right" Margin="10,0,0,0" Padding="3,0" Content="..." TabIndex="2"/>
        <TextBox Margin="10,0,0,0" TabIndex="1">Path string</TextBox>
    </DockPanel>
</RadioButton>