【问题标题】:Multi level header structure WPF多级标题结构 WPF
【发布时间】:2012-08-28 22:47:16
【问题描述】:

我需要在 WPF 中进行标题结构预览。我已经研究过使用 StackPanels 和 DockPanels 并且似乎无法准确掌握需要什么。我还需要一种编程方式来创建标题结构,因为它是根据用户提供的信息创建的。

我需要一些看起来像这样的东西:

|---------超级标题----------| |--------页眉---------|-页眉-| |-副标题-|-副标题-|--------|

我使用 StackPanels 和 DockPanels 的主要问题是它们只会占用最小空间而不是填充以匹配超级标题宽度。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# wpf header multi-level


    【解决方案1】:

    您是否考虑过使用 DataGrid 控件 (documentation)?

    您可以创建一个类来保存您的标题。例如:

    public class BiologicalClassification
    {
        public string Kingdom { get; set; }
        public string Phylum { get; set; }
        public string Class { get; set; }
        public string Order { get; set; }
        public string Family { get; set; }
        public string Genus { get; set; }
        public string Species { get; set; }
    }
    

    然后您可以将所有标头数据存储在代码隐藏或视图模型中的 List<BiologicalClassification> 中。

    然后您可以使用绑定在DataGrid 中显示此数据:

    <DataGrid ItemsSource="{Binding BiologicalClassifications}"
              AutoGenerateColumns="False"
              GridLinesVisibility="None">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Kingdom" Binding="{Binding Kingdom}"/>
            <DataGridTextColumn Header="Phylum" Binding="{Binding Phylum}" />
            ...
        </DataGrid.Columns>
    </DataGrid>
    

    这将确保您的超级标题(在本例中为 Kingdom)始终是恒定宽度。与其余标题相同。

    【讨论】:

    • 唯一的问题是我需要以编程方式设置它而不是通过 XAML。
    • 您的意思是您需要以编程方式设置列名?还是只是数据?
    • 我的意思是我需要以编程方式设置列数和标题以及每个值内的文本。我还必须以编程方式设置绑定。我猜我可能没有完全理解你说的要做什么。
    • 我明白了……如果列数不固定,那肯定会更棘手。您可以做的一件事是设置AutoGenerateColumns="True"(并删除DataGrid.Columns 部分)。它在一定程度上限制了灵活性,但在这种情况下它可以工作。
    • 我们找到了解决方法。我们收集了每个超级标题、标题和子标题的每一列、每一列跨度和每一行。比我们只是将它们一一添加到需要的位置。有点老套,但它现在完成了工作。
    猜你喜欢
    • 2011-06-17
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2014-08-08
    相关资源
    最近更新 更多