7

サイズ変更可能なウィンドウの最小高さ/最小幅を初期の高さに基づいて設定しようとしています(SizeToContent = "WidthAndHeight"の場合)。

私はいくつかの答え/解決策を見てきました:

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

子プロパティに基づいてフォームのMinWidthとMinHeightを設定します

でも:

  1. 私はMVVMパターンを使用しようとしていますが、xamlでこれを実現できるようにしたいと考えています。

  2. また、MinHeightなどの値をViewModelから除外したいと思います。これらは、ビューの動作の些細な部分をViewModelに結び付けるため、そこに属しているとは思いません。これは私がUXデザイナーに任せたいものです。

私が苦労している解決策は、次のxaml/bindingを使用することです。

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

'Mode=OneTime'がMinHeightをウィンドウの高さの初期値にバインドすることを期待します。

しかし、それは機能しません。

誰かが理由を説明できますか?私の基準を満たす解決策はありますか?

ありがとう、

マーク

4

2 に答える 2

11

あなたのコード:

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

のデフォルト値ActualHeightがゼロであり、WPFフレームワークがウィンドウのサイズを変更するまでにMinHeight、デフォルト値ActualHeightがゼロであることがすでに割り当てられているため、機能しません。

最初に試すことができるのは、これです。ウィンドウのサイズ変更時に変更されたMode=OneTimeときにMode=DefaultWPFが更新されるように、に変更します。それがうまくいけば、あなたは幸せになるでしょう。MinHeightActualHeight

それ以外の場合は、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;
     }
}

それがあなたの問題を解決することを願っています。または、少なくとも、どのように進めるかについてのアイデアが得られます。ウィンドウのサイズを修正したい場合はMaxHeightWindow_SizeChanged()ハンドラーでを設定することもできます。


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>
于 2011-01-06T11:37:36.183 に答える
0

このコードを探しているのではないかと思います。

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

これにより、高さと幅が設定されたMinHeightとMinWidthに設定されます。したがって、変更するポジションは1つだけです。

于 2013-02-10T16:56:01.573 に答える