1

我一直坚持要在 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 事件并不是最好的方法。

那么,简而言之,动态调整窗口内容大小的正确方法是什么?

4

1 回答 1

3

您使用了错误的容器,这就是您的 UI 无法自动调整大小的原因。

删除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 事件。实际上,您可能在其他框架中习惯的大多数事件处理在 WPF 中变得无用且不需要,因为它具有高级 DataBinding 功能和对分辨率独立性的本机支持。

于 2013-08-20T18:31:44.250 回答