在我的窗口中,有一个 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"
来改变这一点,但这只会导致按钮再次变小,而不会使文本框变宽(即使使用 HorizontalAlignment="Stretch"
)。
我希望控件按该顺序排列的原因是,当使用 tab
在窗口中导航时,我希望用户先到达 TextBox,然后再到达 Button。我研究了设置 TabIndex
,但感觉很老套,WPF 最喜欢的功能是 tabindex 是按照 XAML 中定义的控件的顺序排列的。更不用说我可能必须在窗口中的所有内容上手动设置 TabIndex。
对我来说,似乎 TextBox.HorizontalAlignment 的设置不受尊重。 如何使第一个控件使用尽可能多的空间,但仍保留 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/