2011-01-06 2 views
7

크기 높이기 창의 초기 높이 (SizeToContent = "WidthAndHeight")를 기준으로 크기 조정 가능 창의 MinHeight/MinWidth를 설정하려고합니다. 그러나WPF - 초기 높이를 기준으로 크기 조정 가능 창의 MinHeight 설정 시도

http://weblogs.asp.net/psheriff/archive/2010/01.aspx

Set form MinWidth and MinHeight based on child property

:

  1. 내가 MVVM 패턴 를 사용하려고하고 싶습니다

    나는 대답의 부부/솔루션을 보았다 xaml에서 을 달성 할 수 있어야합니다.

  2. 나는 또한 뷰 모델에서와 같은 중요 minHeight 같은 값 을 유지하고 싶은 - 나는 그들이 의 ViewModel에보기의 동작의 사소한 부분 넥타이로 그들이 거기에 속하는 것 같아요. 이것은 UX 디자이너에게 맡기고 싶은 것입니다. 나는 '모드 = 일회용이'창문 높이의 초기 값으로의 minHeight를 결합하는 것을 희망

    <Window 
         .... 
         x:Name="mainWindow" 
         SizeToContent="WidthAndHeight" 
         ResizeMode="CanResizeWithGrip" 
         MinHeight="{Binding ElementName=mainWindow, Mode=OneTime, Path=ActualHeight}" 
    > 
    

    을 :

내가 고민하고 해결책은 바인딩/다음 XAML을 사용하는 것입니다 .

하지만 작동하지 않습니다 ..

누군가 이유를 설명해주세요. 내 기준에 맞는 솔루션이 있습니까?

감사합니다,

마크

답변

8

귀하의 코드 : ActualHeight의 기본 값이 0이고, WPF 프레임 워크는 당신의 창 크기를 조정 시간에 의해 때문에

<Window 
     .... 
     x:Name="mainWindow" 
     SizeToContent="WidthAndHeight" 
     ResizeMode="CanResizeWithGrip" 
     MinHeight="{Binding ElementName=mainWindow, Mode=OneTime, Path=ActualHeight}" 
> 

그것은, 그것을 작동하지 않습니다 MinHeight을 할당했으며 기본값은 ActualHeight이며 0입니다. ActualHeight가 창 크기를 조정에서 변경됩니다 때 WPF가 MinHeight를 업데이트 할 수 있도록 변경 Mode=Default-Mode=OneTime : 당신이 시도 할 수

우선은 이것이다. 그게 효과가 있다면, 당신은 행복 할거야.

그렇지 않으면 SizeChanged 이벤트를 처리해야하며 처리기에서 MinHeight을 업데이트 할 수 있습니다. 코드 숨김에서

<Window 
      .... 
      x:Name="mainWindow" 
      SizeToContent="WidthAndHeight" 
      ResizeMode="CanResizeWithGrip" 
      SizeChanged="Window_SizeChanged" 
> 

:

bool firstTime= true; 
private void Window_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    FrameworkElement element = sender as FrameworkElement; 
    if (firstTime) 
    { 
      element.MinHeight = e.NewSize.Height; 
      firstTime= false; 
    } 
} 

은 당신의 문제를 해결하기를 바랍니다. 또는 atleast는 proceeed하는 방법에 관해서 당신에게 약간의 아이디어를 줄 것입니다. 창 크기를 수정하려면 Window_SizeChanged() 핸들러에서 MaxHeight을 설정할 수도 있습니다.


XAML 유일한 해결책

<Window 
     x:Name="mainWindow" 
     SizeToContent="WidthAndHeight" 
     ResizeMode="CanResizeWithGrip" 
> 
<Window.Triggers> 
<EventTrigger RoutedEvent="SizeChanged"> 
    <BeginStoryboard> 
     <Storyboard Storyboard.TargetName="mainWindow"> 
      <DoubleAnimation Storyboard.TargetProperty="MinHeight" 
          To="{Binding ElementName=mainWindow, Path=ActualHeight}"/> 
     </Storyboard> 
    </BeginStoryboard> 
</EventTrigger> 
</Window.Triggers> 
<!---- other code goes here---> 
</Window> 
+1

이것은 MinHeight를 0이 아닌 값으로 설정합니다. 그러나 창 크기를 조정할 때마다 항상 MinHeight가 설정되므로 사용자가 창의 크기를 늘릴 수는 있지만 결코 줄일 수는 없습니다. MinHeight를 한 번만 설정하려고합니다. 'SizeToContent = "WidthAndHeight"로 디 메이트 된 처음 크기로 –

+0

창이 먼저 크기가 조정될 때까지 바인딩을 연기하는 방법이있을 수 있습니다. xaml에서 할 수 있습니까? –

+0

@ 마크 : SizeChanged 이벤트를 처리해야합니다 :-) – Nawaz

0

난 당신이 코드 조각을 찾고 있습니다 의심 다음의 minHeight 및 minWidth를 세트

<Window 
x:Name="myWindow" 
MinHeight="266" Height="{Binding ElementName=myWindow, Path=MinHeight}" 
MinWidth="480" Width="{Binding ElementName=myWindow, Path=MinWidth}"> 

이 높이 설정하고 폭. 따라서 당신은 한 가지 자세 만 바꿀 수 있습니다.