2010-06-30 5 views
18

Ho un'applicazione WPF con alcune forme. In fase di progettazione sono piccoli e non sono impostati sulla dimensione automatica. Tuttavia in fase di esecuzione sono giganti, anche senza contenuti in loro per renderli grandi.Perché sono le mie dimensioni delle finestre WPF inadempienti ad essere enorme

Perché sta succedendo?

Ecco una delle forme

<Window x:Class="SuperPluginPicker" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:tree="clr-namespace:Aga.Controls.Tree;assembly=Aga.Controls" 
      mc:Ignorable="d" 
      d:DesignHeight="296" d:DesignWidth="634" Title="Plugin Selector" WindowStartupLocation="CenterOwner"> 
    <Grid> 
     <DockPanel LastChildFill="true"> 
      <StackPanel DockPanel.Dock="Bottom" Height="30" Orientation="Horizontal"> 
       <Button Content="Ok" Name="btnOk" Click="btnOk_Click"></Button> 
       <Button Content="Cancel" Name="btnCancel" Click="btnCancel_Click"></Button> 

      </StackPanel> 
      <StackPanel DockPanel.Dock="Right"> 
       <Label Content="Selected Plugins"></Label> 
      <ListBox Name="lstSelectedPlugins" Width="200"> 
       <ListBox.ItemTemplate> 



        <DataTemplate> 



         <Label Content="{Binding Name}" /> 

        </DataTemplate> 

       </ListBox.ItemTemplate> 

      </ListBox> 
      </StackPanel> 
      <StackPanel DockPanel.Dock="Right" Width="100" VerticalAlignment="Center"> 
       <Button Content="Add" Name ="btnAdd" Click="btnAdd_Click"></Button> 
       <Button Content="Remove" Name="btnRemove" Click="btnRemove_Click"></Button> 
       <Button Content="Remove All" Name="btnRemoveAll" Click="btnRemoveAll_Click"></Button> 
      </StackPanel> 

      <tree:TreeList x:Name="pluginTree"> 
       <tree:TreeList.View> 
        <GridView x:Name="treeGrid"> 
         <GridView.Columns> 

          <GridViewColumn Width="Auto" Header="Name"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
             <StackPanel Orientation="Horizontal"> 
              <tree:RowExpander/> 

              <TextBlock Text="{Binding Name}"></TextBlock> 
             </StackPanel> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Header="Author" Width="Auto" DisplayMemberBinding="{Binding Author}"/> 
          <GridViewColumn Header="Description" Width="Auto" DisplayMemberBinding="{Binding Type}"/> 


         </GridView.Columns> 
        </GridView> 
       </tree:TreeList.View> 
      </tree:TreeList> 
     </DockPanel> 
    </Grid> 
</Window> 
+0

Che dimensioni sono in fase di esecuzione? 634x296? –

+0

im che esegue un widescreen 1900x1280 e la finestra lascia solo circa 1/2 pollice su ciascun lato dello schermo. (bene 1/2 pollice in alto a sinistra e in basso, forse 2 pollici a destra.ma ancora molto grande) –

+0

possibile duplicato di [Dimensione finestra quando SizeToContent non è specificato] (http://stackoverflow.com/questions/1437099/window-size-when-sizetocontent-is-not-specified) – paxdiablo

risposta

32

Se si crea un <Window/> con questo codice:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" /> 

Poi, quando si esegue che da Visual Studio verrà visualizzata una finestra delle stesse dimensioni di quello che si mette in discussione. Quindi questo non è qualcosa che hai esplicitamente fatto.

Quello che hai incontrato è la dimensione predefinita calcolata di un WPF Window. Per risultati diversi, specificare un parametro SizeToContent sulla finestra, come paxdiablo ha sottolineato, in modo esplicito o impostare la dimensione della finestra con i MinHeight, MaxHeight, Height, MinWidth, MaxWidth, e/o Width proprietà.

+0

Una risposta molto chiara, ben scritta e accurata. +1. –

+3

A proposito, se crei una finestra in MFC, Win32 o Win16 scoprirai che ottieni la stessa dimensione predefinita. Ad esempio, il codice Win32 'CreateWindow (szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);' fornisce la stessa finestra delle dimensioni di WPF. WPF non sta selezionando la dimensione predefinita: Windows lo sta facendo da solo, usando un algoritmo che è rimasto praticamente lo stesso da quando Windows 2.0 è uscito nel 1987. –

+0

Questo è calcolato dalla dimensione della schermata principale, quindi, giusto? –

7

Perché non è sufficiente aggiungere un:

Height="296" Width="634" 

alla definizione Window? Non sono sicuro da dove provenga la dimensione predefinita, ma ho impostato dimensioni specifiche sulle mie finestre per aggirare questo problema. Quindi ridimensiono dinamicamente nel codice di avvio dell'applicazione.

Spero che WPF avrà una caratteristica pack -come dove si imposta in modo ricorsivo i controlli in base alle dimensioni preferite dei sotto-controlli (altalena e wxPython entrambi avevano questa caratteristica) quindi si consiglia di andare alla ricerca di quel .


In realtà, un po 'di ricerca ha trasformato la proprietà Window.SizeToContent che può essere quello che stai cercando. Il suo valore di default è Manual ma, se lo si imposta a uno degli altri valori (Width, Height o WidthAndHeight), si può vedere una migliore presentazione.

In realtà, ho solo scalfito verso il computer portatile di Windows ed è entrato:

SizeToContent="WidthAndHeight" 

nella definizione della finestra e sembra perfettamente dimensioni. Quindi, suggerirei di provare e vedere se risolve (o almeno funziona) il tuo problema.

+0

Funziona, ma perché sta scegliendo una dimensione di default così grande? –

+0

@Jason: nessuna idea, ma sospetto che stia interrogando le tue metriche di sistema per ottenere le dimensioni dello schermo. La mia app attuale (il mio primo WPF) si comporta in modo simile in quanto si centra e lascia un po 'intorno ai bordi. Ricordo di aver letto da qualche parte che WPF avrebbe impostato automaticamente il 60% della larghezza e dell'altezza del monitor principale se non lo avessi specificato, ma anche che c'erano molte altre cose che potevano influenzarlo (anche se non riesco a trovare quel riferimento ora). Penso che andrò con il 'SizeToContent' in futuro (vedi il mio aggiornamento) e non fare affidamento su qualche problema con i colleghi di MS :-) – paxdiablo

+0

E finalmente ho trovato il collegamento, che sfortunatamente fa sì che questa domanda sia un dupe: http://stackoverflow.com/questions/1437099/window-size-when-sizetocontent-is-not-specified – paxdiablo

6

Nella progettazione si sta vedendo piccola perché avete le proprietà design si fondono per la finestra.

d: DesignHeight = "296" d: DesignWidth = "634"

Poiché Grid è un layout dinamico sarà stirata alla larghezza della finestra & altezza. Per limitare le dimensioni della finestra è necessario menzionare l'altezza & Proprietà della larghezza nella finestra.

Problemi correlati