【问题标题】:WPF Dockpanel first child uses remaining spaceWPF Dockpanel 第一个孩子使用剩余空间
【发布时间】: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.Horizo​​ntalAlignment 的设置似乎没有得到尊重。 如何让第一个控件使用尽可能多的空间但仍保留 Tab 键顺序?

【问题讨论】:

    标签: wpf xaml dockpanel


    【解决方案1】:

    把它变成这样:

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

    【讨论】:

    • 太棒了!完全不直观且令人讨厌,但考虑到 DockPanel 的设计方式,它的工作方式就像一种魅力,并且有一种奇怪的感觉。好电话。
    • 我已经看过好几次了。我主要担心的是 XAML 中元素的顺序不再与窗口的视觉布局相匹配。而且它搞乱了标签顺序。
    • 我同意@ChristofferLette +1,但以防万一有人需要,这里是 taborder 问题的解决方法。这可能需要大量的手动工作,而且并不总是能很好地工作(例如使用 DataGrid):stackoverflow.com/a/4808810/724944
    • 不错!我正在解决类似的问题,但没有意识到子订单没有反映视觉订单,这解决了我的问题。
    • 在基本情况下(一个拉伸的顶部区域和一个底部区域)执行此操作,并且选项卡顺序很好。也许问题只在特定条件下才会出现?
    【解决方案2】:

    如果您不想要 DockPanel 的行为,请不要使用 DockPanel。

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
    
        <TextBox />
        <Button Content="..." Grid.Column="1"/>
    </Grid>
    

    【讨论】:

    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多