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. 私も のViewModelの外に、このようなminHeightのような値 を維持したいと思います - 私は、彼らが のviewmodelにビューの行動の些細な部分を結ぶよう、彼らはそこに 属すると思ういけません。これは私がUXデザイナーに任せておきたいことです。私は「=ワンタイムモードは、」窓の高さの初期値にminHeightのを結合することを望んでいるだろう

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

私は苦労しています解決策は、次のXAML /バインディングを使用することです。

しかし、動作しません..

誰かが理由を説明できますか?私の基準を満たすソリューションはありますか?

おかげで、

マーク

答えて

8

あなたのコード:それは動作しません

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

ActualHeightのデフォルト値はゼロであり、時間によってWPFフレームワークは、あなたのウィンドウのサイズを変更するので、それはすでに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をゼロ以外の値に設定します。ただし、ウィンドウがサイズ変更されるたびに常にMinHeightが設定されます。つまり、ユーザーはウィンドウのサイズを大きくすることはできますが、ウィンドウのサイズを小さくすることはできません。私はMinHeightを一度だけ設定しようとしています - 最初のサイズに 'SizeToContent = "WidthAndHeight"によって決定されるように –

+0

ウィンドウが最初にサイズ変更されるまでバインディングを延期する方法があります。 xamlでこれを行うことはできますか? –

+0

@マーク:SizeChangedイベントを処理する必要があります:-) – Nawaz

0

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

これがminHeightのプロパティおよびminWidthセットに高さと幅を設定します。だからあなたは一つのポジションしか変えていない。

関連する問題