2011-01-06 12 views
7

İlk yüksekliğini (BoyutToContent = "WidthAndHeight") temel alarak yeniden boyutlandırılabilir bir pencerenin MinHeight/MinWidth değerini ayarlamaya çalışıyorum. AncakWPF - İlk yüksekliğine göre yeniden boyutlandırılabilir pencerenin MinHeight'ı ayarlamaya çalışılıyor

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

Set form MinWidth and MinHeight based on child property

:

  1. MVVM desen kullanmaya çalışıyorum ve istiyorum

    Ben cevaplar bir çift/çözüm gördük Bunu xaml'de elde edebileceksiniz.

  2. Ben de ViewModel dışına böyle MinHeight gibi değerleri tutmak istiyorum - Onların ViewModel bakış davranışı önemsiz bir kısmını kravat olarak onlar orada ait sanmıyorum. Bu, UX tasarımcısına gitmek istediğim bir şey. I 'Mod = OneTime' pencere yüksekliğinin başlangıç ​​değerine MinHeight bağlanmaları umut

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

    :

I ile mücadele ediyorum çözeltisi/bağlanma aşağıdaki xaml kullanmaktır .

Ama çalışmıyor ..

Birisi neden açıklayabilir misiniz? Kriterleri karşılayan bir çözüm var mı?

sayesinde

Mark

cevap

8

Kodunuz: ActualHeight varsayılan değeri sıfırdır ve WPF çerçeve pencerenden boyutlandırır zaman çünkü

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

O, bunu işe yaramaz Zaten sıfır olan ActualHeight varsayılan değeri ile MinHeight atanmış! ActualHeight pencere boyutlandırma değiştirildi aldığında WPF MinHeight güncelleme böylece, değişim Mode=Default için Mode=OneTime: deneyebileceğiniz

ilk şey budur. Eğer işe yarıyorsa, o zaman mutlu olursun.

Aksi takdirde, SizeChanged olayını ele almanız gerekir ve işleyicide MinHeight'u güncelleyebilirsiniz. arka plan kod olarak

<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; 
    } 
} 

senin sorununu çözecek Umut. Ya da en azından size nasıl prosedüre dair bir fikir verecektir. Pencerenizin boyutunu düzeltmek isterseniz, Window_SizeChanged() işleyicide MaxHeight'u da ayarlayabilirsiniz.


XAML TEK ÇÖZÜM

<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

Bu, MinHeight değerini sıfır olmayan bir değere ayarlar. Bununla birlikte, pencere yeniden boyutlandırıldığında her zaman MinHight'ı ayarlar, yani kullanıcı pencerenin boyutunu artırabilir ama asla düşüremez. MinHeight'ı bir kereliğine - 'SizeToContent = "WidthAndHeight"' –

+0

tarafından belirlenen başlangıç ​​boyutuna ayarlamaya çalışıyorum. Belki de ilk yeniden boyutlandırılana kadar bağlamanın ertelenmesinin bir yolu vardır. Bunu xaml'da yapabilir miyim? –

+0

@Mark: SizeChanged olayını halletmelisiniz :-) – Nawaz

0

Sana bu kod parça için aradığınız şüpheli: MinHeight ve MinWidth setine

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

Bu Yükseklik ayarlar ve genişliği. Yani sadece değişecek tek bir pozisyon var.