划分 WPF 窗口

本文关键字:窗口 WPF 划分 | 更新日期: 2023-09-27 18:36:31

我想将我的窗口(wpf)分为三列:左列必须DockPanel(我认为StackPanel不适用于Canvas),右列应该是另一个拿着listbox DockPanel,中间我需要有一个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 >

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

划分 WPF 窗口

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

WPF 关系图设计器 - 第 4 部分、第 3 部分、第 2 部分、第 1 部分

您只需在右侧添加一个 PropertyGrid,并在设计器中将选定的工具箱项与它绑定。

您可以在网格内嵌入另一个网格、画布或其他类型的容器,而不必这样做。 但是你有一个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 列是固定大小。

创建一个具有 3 个columnsGrid。对于第一个和第三个把一个DockPanel作为孩子。

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