划分 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 >
另外,应该在右侧使用什么控件才能容纳列表框?
看看你提出的各种问题,看起来你正在考虑构建一个类似于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 个columns
的Grid
。对于第一个和第三个把一个DockPanel
作为孩子。
我认为一般规则是不要把别人置于canvas
之下,而不是相反。