【问题标题】:Dividing WPF window分割 WPF 窗口
【发布时间】:2012-06-12 17:40:51
【问题描述】:

我想将我的窗口(wpf)分成三列:左列必须是DockPanel(我认为StackPanelCanvas 不起作用),右列应该是另一个DockPanel 持有一个@ 987654325@,中间我需要一个Canvas

这就是我所做的,我遇到了左列的问题,因为它不可扩展。我需要左列作为自定义对象的持有者,以便用户可以将它们拖放到画布上。请指教。

<DockPanel LastChildFill="True" Background="LightGray" Margin="5">
   <Expander Header="Controls" Background="Gray" Margin="2" 
             Content="{StaticResource FC}" DockPanel.Dock="Top" 
             IsExpanded="True" Width="200" />
</DockPanel>

<GridSplitter Focusable="False" Width="2" Background="LightGray"
              VerticalAlignment="Stretch" HorizontalAlignment="Right"/>

<lib:MyCanvas x:Name="myCanvas" FlowDirection="LeftToRight"  
         Background="White" AllowDrop="True" 
         Mouse.MouseMove="MyCanvas _MouseMove">
</lib:MyCanvas >

另外,应该在右侧使用什么控件来容纳列表框?

【问题讨论】:

  • 您似乎缺少一些 XAML,我看到了 GridSplitter 但没有网格?如果我假设所有这些周围都有一个外部Grid 容器,那么[最后一个] 问题的答案是您不需要容器,Grid 就是容器。如果这里还有问题,我不知道是什么。
  • 不,我没有使用任何网格。我在想 Grid 和 Canvas 不能在窗口上一起使用。所以你是说我必须将所有这些嵌入到网格中?
  • 你能告诉我它大概是什么样子吗?

标签: c# .net wpf xaml window


【解决方案1】:

用 3 个columns 创建一个Grid。对于第一个和第三个,将DockPanel 作为孩子。

我认为一般规则是不要将其他人置于canvas 之下,而不是相反。

【讨论】:

    【解决方案2】:

    查看您提出的各种问题,您似乎正在考虑构建一个类似于 Visual Studio 的应用程序。我建议您查看 CodeProject 上与您的要求相似的以下系列文章,即拥有工具箱、各种工具箱项目、设计器、在设计器上拖放项目等。-

    WPF 图表设计器 - Part 4Part 3Part 2Part 1

    您只需在右侧添加一个 PropertyGrid 并将您在设计器中选择的 ToolBox 项目与它绑定。

    【讨论】:

      【解决方案3】:

      可以在网格中嵌入另一个网格、画布或其他类型的容器,而不必这样做。但是你有一个GridSplitter,所以根据定义,它需要放在Grid 内才能提供它的功能,否则它什么也做不了。

      听起来你想做这样的事情:

      <Grid>
          <Grid.ColumnDefinitions>
              <ColumnDefinition Width="*" />
              <ColumnDefinition Width="5" />
              <ColumnDeifnition Width="*" />
              <ColumnDefinition Width="100" /> <!-- whatever size you need here --->
          </Grid.ColumnDefinitions>
      
          <DockPanel LastChildFill="True" Background="LightGray" Margin="5" Grid.Column="0">
            <Expander Header="Controls" Background="Gray" Margin="2" 
                 Content="{StaticResource FC}" DockPanel.Dock="Top" 
                        IsExpanded="True" Width="200" />
         </DockPanel>
         <GridSplitter Focusable="False" Width="2" Background="LightGray" Grid.Column="1"
                          VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ResizeDirection="Columns"/>
      
          <lib:MyCanvas x:Name="myCanvas" FlowDirection="LeftToRight"  Grid.Column="2"
               Background="White" AllowDrop="True" 
                     Mouse.MouseMove="MyCanvas _MouseMove">
          </lib:MyCanvas >
      
          <ListBox Grid.Column="3" ... />
      </Grid>
      

      此布局为您提供 3 列,第 2 列是您的拆分器,可让您调整前 2 列的大小(在它们之间来回滑动),而您的第 3 列是固定大小。

      【讨论】:

      • 我看到 Grid.Column 是从零开始的值,所以我假设 Grid.Column=3 中的 ListBox 对吗?
      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多