【发布时间】:2011-04-10 07:49:50
【问题描述】:
在一个窗口中,我有一个DockPanels 列表来指定几个文件。每个 DockPanel 都有一个 TextBox(用于路径)和一个按钮(用于浏览文件)。
我重新创建了一个简单的 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 在窗口中导航时,我希望用户在 Button 之前到达 TextBox。我查看了设置TabIndex,但感觉很hacky,WPF最喜欢的功能是tabindex按照XAML中定义的控制顺序排列。更不用说我可能不得不在 Window 中的所有内容上手动设置 TabIndex。
对我来说,TextBox.HorizontalAlignment 的设置似乎没有得到尊重。 如何让第一个控件使用尽可能多的空间但仍保留 Tab 键顺序?
【问题讨论】: