我一直坚持要在WPF中完成一个项目,而且我在WPF中唯一的经验就是从我开始以来过去一周从互联网上获得的(主要是SO)。因此,如果我的问题看起来很简单,或者即使是一个愚蠢的机智,答案似乎也很明显,那么我只能道歉并请求你的耐心!
这是构成我的主窗口的XAML:
<Window>
<Grid Width="Auto" Height="Auto">
<StackPanel>
<DockPanel Margin="2">
<StackPanel Orientation="Horizontal">
<Border Name="leftPane" Height="Auto" CornerRadius="6" BorderBrush="Gray" Background="LightGray" BorderThickness="2" Padding="8">
<!-- Various controls here for the "left pane" -->
</Border>
<Separator BorderThickness="1" Margin="2"></Separator>
<Border Name="rightPane" Height="Auto" CornerRadius="6" BorderBrush="Gray" BorderThickness="2" Padding="0" Background="#FFF0F0F0">
<Canvas Name="canvasMain" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Width="Auto" Height="Auto">
<!-- I need to resize the rightPane and the canvasMain when the user manually resizes the main window -->
</Canvas>
</Border>
</StackPanel>
</DockPanel>
</StackPanel>
</Grid>
</Window>
窗口或多或少看起来像这样:
=================================================================
- -
- ------------- -------------------------------------------- -
- | Left Pane | | Right Pane | -
- | width:100 | | Need to expand width and height when | -
- | | | ...the main window is resized by the | -
- | | | ...user | -
- | | | | -
- | | | | -
- | | | | -
- | | | | -
- ------------- -------------------------------------------- -
=================================================================
我的第一个倾向是在主窗口的SizeChanged事件中简单地实现一些逻辑。但经过一段时间的谷歌搜索,我遇到了关于附加行为和属性触发器和事件触发器的主题,这反过来让我想到也许SizeChanged事件不是最好的路线。
因此,简而言之,动态调整窗口内容大小的正确方法是什么?
答案 0 :(得分:3)
您使用的是错误的容器,这就是您的用户界面无法自动调整大小的原因。
删除Grid
(因为它是多余的)和StackPanel
(因为它不适合您需要的布局容器。)
<Window>
<DockPanel Margin="2">
<StackPanel Orientation="Horizontal" DockPanel.Dock="Left" Width="100">
<!-- Various controls here for the "left pane" -->
</StackPanel>
<Border>
<Canvas/>
</Border>
</DockPanel>
</Window>
您永远不会为WPF中的任何内容处理SizeChanged事件。实际上,由于它具有高级的DataBinding功能和对解决方案无关性的本机支持,因此在WPF中可能习惯使用的大多数事件处理在WPF中都是无用的和不需要的。