WPF Dockpanel 第一个子项使用剩余空间

标签 wpf xaml dockpanel

在我的窗口中,有一个 DockPanel 列表来指定几个文件。每个 DockPanel 都有一个文本框(用于路径)和一个按钮(用于浏览文件)。

我重新创建了一个简单的 WPF 页面来演示此处的问题:

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="150"
    Height="22">
    <DockPanel>
        <TextBox HorizontalAlignment="Stretch"/> <!-- path to file -->
        <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file -->
    </DockPanel>
</Page>

问题是我希望按钮位于文本框的右侧,但这会导致文本框非常小,因为 DockPanel 的 LastChild 是它占用剩余空间的按钮。我尝试通过将它们打乱并设置 LastChildFill="False" 来改变这一点,但这只会导致按钮再次变小,而不会使文本框变宽(即使使用 Horizo​​ntalAlignment="Stretch")。

我希望控件按该顺序排列的原因是,当使用 tab 在窗口中导航时,我希望用户先到达 TextBox,然后再到达 Button。我研究了设置 TabIndex ,但感觉很老套,WPF 最喜欢的功能是 tabindex 是按照 XAML 中定义的控件的顺序排列的。更不用说我可能必须在窗口中的所有内容上手动设置 TabIndex。

对我来说,似乎 TextBox.Horizo​​ntalAlignment 的设置不受尊重。 如何使第一个控件使用尽可能多的空间,但仍保留 Tab 键顺序?

最佳答案

像这样:

<DockPanel LastChildFill="True">
    <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file -->
    <TextBox DockPanel.Dock="Left" HorizontalAlignment="Stretch"/> <!-- path to file -->
</DockPanel>

关于WPF Dockpanel 第一个子项使用剩余空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3677918/

相关文章:

c# - WPF 如何在代码中将网格行和列大小重置为 "*"

WPF 绑定(bind)复选框列表,其中 IsChecked 绑定(bind)到列表的成员资格

c# - WPF 本地化扩展

wpf - 需要有关 WPF 中自定义样式的帮助

.net - DockPanel 内的 ZIndex

c# - 将用户控件打印到 A4 页面的中心

c# - 获取渐变上特定位置的颜色

c# - 如果异常是从 Microsoft 的代码中抛出的,我如何找出最初导致异常的原因?

html - Angular 中的 float 面板

c# - WPF 和 MVVM 的结构和性能