2013-08-20 3 views
1

저는 WPF에서 할 수있는 프로젝트에 매달 렸습니다. WPF에있는 유일한 경험은 제가 시작한 이래로 지난 주 동안 인터넷에서 얻은 경험입니다. 따라서 제 질문이 초보적인 것으로 보이거나 답이 희미한 것으로 보이는 경우 사과하고 사과하십시오. 이 같은메인 창의 캔버스 크기를 동적으로 조정합니까?

<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         | - 
- |   | |           | - 
- |   | |           | - 
- |   | |           | - 
- |   | |           | - 
- ------------- -------------------------------------------- - 
================================================================= 

나의 첫번째 성향은 단순히 몇 가지 논리를 구현하는 것입니다 여기에

내 주 창을 constitutues XAML입니다 기본 창의 SizeChanged 이벤트입니다. 그러나 빠른 검색 후 첨부 된 동작 및 속성 트리거 및 이벤트 트리거에 대한 항목이 나왔습니다.이 이벤트는 아마도 SizeChanged 이벤트가 따라야 할 최적의 경로가 아니라고 생각하게되었습니다.

간단히 말해서, 동적으로 창의 내용의 크기를 조정하는 올바른 방법은 무엇입니까?

답변

3

잘못된 컨테이너를 사용하고 있습니다. UI가 자동 크기가 아니기 때문입니다.

는 제거 Grid (이 중복 때문에)와 StackPanel (당신이 여기에서 필요로하는 무슨을을위한 appropiate 레이아웃 컨테이너 아니기 때문에.)

<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에서 쓸데없고 불필요하게 렌더링됩니다.

+0

음,이 작동하지만 캔버스 배경이 더 이상 작동하지 않습니다. 캔버스의 배경에 직사각형을 그리기 위해 (다른 곳에서) 코드를 찾았습니다 (http://stackoverflow.com/questions/6434284/how-to-draw-gridline-on-wpf-canvas). 그것은 기본적으로 그리드입니다.) 그것은 훌륭하게 작동했습니다; 그러나 더 이상 이러한 최근 변경 사항으로 작업하지 않습니다. 어떤 아이디어? – Jagd

+0

@Jagd 나는 잘 모르겠다. 현재 XAML로 새로운 질문을 만들고 무엇이 작동하는지, 작동하지 않는지 확인한다. –

+0

그래, 어둠 속에서 단지 발사 였어. 나는 그걸로 좀 더 원숭이가 될 것이고, 내가 그것을 알아낼 수 없는지 지켜 볼 것이다. 감사. – Jagd

관련 문제