【问题标题】:WPF Issues with Control Layout控件布局的 WPF 问题
【发布时间】:2011-01-16 16:41:51
【问题描述】:

我正在制作一个使用其 API 连接到我们的计费软件的应用程序,但在布局正常工作时遇到了一些问题。

我想这样当一个扩展器最小化时,另一个窗口填补空白,当它再次扩展时,另一个扩展器回到原来的位置。现在,当箭头单击一个时,只有一个空白。我使用 DockPanel 作为我认为会自动执行此操作的父级,但它不起作用。

第二个问题,有没有办法让这些区域调整大小?我不想尝试让用户取消停靠菜单(甚至不知道仅使用直接 WPF 是否可能),但如果他们可以更改它们的宽度/高度会很好。

另外,这只是 C# 的一个新手问题,但 C++ 头文件的等价物是什么?看起来您只是使用 .cs 文件,但我不确定。我想提取所有从计费软件中提取数据的函数,并将它们放入不同的文件中以清理代码。

这是我的 XAML...

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Billing Management" Height="550" Width="754" xmlns:shared="http://schemas.actiprosoftware.com/winfx/xaml/shared" WindowStartupLocation="CenterScreen" WindowStyle="ThreeDBorderWindow">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="22" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Menu Height="22" Name="menu1" Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" HorizontalContentAlignment="Left" IsEnabled="True" IsMainMenu="True">
            <MenuItem Header="_File">
                <MenuItem Header="_Open" />
                <MenuItem Header="_Close" />
                <Separator/>
                <MenuItem Header="_Exit" />
            </MenuItem>
        </Menu>
            <TabControl Name="tabControl1" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" BorderThickness="1" Padding="0" TabStripPlacement="Bottom" UseLayoutRounding="False" FlowDirection="LeftToRight" Grid.Row="1">
                <TabItem Header="Main" Name="tabItem1" Margin="0">
                    <DockPanel Name="dockPanel1" LastChildFill="True">
                        <ListBox Height="100" Name="listBox3" DockPanel.Dock="Top" />
                        <ListBox Name="listBox4" Width="200" DockPanel.Dock="Right" />
                        <DockPanel Height="Auto" Name="dockPanel2" Width="Auto" VerticalAlignment="Stretch" LastChildFill="True">
                            <shared:AnimatedExpander Header="Staff Online" Width="200" Name="expanderStaffOnline" IsExpanded="True" Height="194" BorderThickness="0" DockPanel.Dock="Top" VerticalContentAlignment="Stretch">
                                    <ListBox Name="listboxStaffOnline" Width="Auto" Height="Auto" Margin="0" VerticalAlignment="Stretch" Loaded="listboxStaffOnline_Loaded" />
                            </shared:AnimatedExpander>
                            <shared:AnimatedExpander Header="Test Menu 2" Height="Auto" Name="animatedExpander1" BorderThickness="1" Margin="0,0,0,0" IsExpanded="True" VerticalContentAlignment="Stretch">
                                    <ListBox Height="Auto" HorizontalAlignment="Stretch" Name="listBox6" VerticalAlignment="Stretch" Margin="0" BorderThickness="1" />
                            </shared:AnimatedExpander>
                        </DockPanel>
                    <ListBox Height="100" Name="listboxAdminLogs" DockPanel.Dock="Bottom" Loaded="listboxAdminLogs_Loaded" />
                        <ListBox Name="listBox5" />
                    </DockPanel>
                </TabItem>
                <TabItem Header="Support" Name="tabItem2" Margin="0">
                </TabItem>
            <TabItem Header="Clients" />
            <TabItem Header="Billing" />
            <TabItem Header="Orders" />
        </TabControl>
    </Grid>
</Window>

【问题讨论】:

  • 还有一个简单的问题。是否有任何控件可以提供与扩展器上的“标题栏”相同的外观?我想统一我的界面并给其他部分提供标题栏,但我不希望它们能够扩展/最小化其中的一些。

标签: c# .net wpf controls


【解决方案1】:

您应该将扩展器放在允许内容自动扩展和填充的网格中。提供行/列定义宽度/高度设置为自动或*。

如果要调整大小,则需要使用 GridSplitter;详情请参阅http://www.wpftutorial.net/GridLayout.html

我不懂 C++,所以不能真正告诉你想要头文件的等价物,但我认为你想要做的事情是可以使用部分类来实现;详情请参阅http://msdn.microsoft.com/en-us/library/wa80x488(v=vs.80).aspx

最后,在您的 cmets 中回答您的问题;要使 WPF 中的所有控件具有统一的外观,您需要创建使用一组通用颜色/画笔的自定义样式。

【讨论】:

    【解决方案2】:

    我建议您将扩展器放在网格中,并将网格的行高设置为自动。 要使其可调整大小,只需在此网格的行之间添加 GridSplitters。

    至于您添加的问题:我认为最好复制扩展器标题的样式并将其用于标签或其他标题。

    另外(这个问题很多):C#没有头文件。

    【讨论】:

    • 同时使用 GridLength Auto 和 GridSplitters 不起作用,因为 GridSplitters 在您使用它们的那一刻显式设置了 GridLength。
    • 所以只需将 DockPanel 替换为使用设置为 Auto 的行高的 Grid?我还没有研究过 GridSplitters,但这听起来不错,我会检查一下。对于标题,标签是最好的选择?
    猜你喜欢
    • 2013-02-17
    • 2010-11-19
    • 2011-04-24
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2016-10-09
    相关资源
    最近更新 更多