2

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

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

4

3 回答 3

1

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

于 2012-06-08T16:43:41.280 回答
1

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

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

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

于 2012-06-18T18:24:06.417 回答
0

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

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

于 2012-06-08T16:42:11.813 回答