2013-08-20 60 views
1

我一直堅持在WPF中完成一個項目,而且我在WPF中唯一的體驗就是我從上網開始就已經從互聯網獲得的內容(大多數是SO)。所以如果我的問題看起來很簡單,或者即使是一個暗淡的機智,答案似乎也很明顯,那麼我只能道歉並懇求你的耐心!在主窗口中動態調整畫布大小?

這裏是constitutues我的主窗口中的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事件。但經過一番Google搜索之後,我遇到了關於附加行爲和屬性觸發器和事件觸發器的主題,這反過來讓我想到,也許SizeChanged事件不是最好的遵循路線。

所以,簡而言之,什麼是動態調整窗口內容的正確方式?

回答

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> 

你永遠不處理SizeChanged事件在WPF什麼。實際上,由於其先進的DataBinding功能以及對分辨率獨立性的本機支持,大多數可能用於其他框架的事件處理在WPF中都變得毫無用處和不必要。

+0

嗯,這可行,但我在畫布上的背景已不再起作用。我在SO上找到了一些代碼(在其他地方)(http://stackoverflow.com/questions/6434284/how-to-draw-gridline-on-wpf-canvas),在畫布的背景上繪製矩形(給它基本上是一個網格),它運作得很好;但是,它不再適應這些最近的變化。有任何想法嗎? – Jagd

+0

@Jagd我不知道該死的人,用當前的XAML創建一個新問題,什麼是和不工作。 –

+0

是的,這只是在黑暗中拍攝而已。我會再與它一起猴子,看看我不知道。謝謝。 – Jagd