2010-06-30 11 views
18

Tengo una aplicación wpf con algunas formas. En el momento del diseño, son pequeños y no están configurados en tamaño automático. Sin embargo, en el tiempo de ejecución son gigantes, incluso sin contenido para hacerlos grandes.¿Por qué mis tamaños de ventana WPF son por defecto enormes

¿Por qué sucede esto?

Aquí es una de las formas

<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

¿De qué tamaño son en tiempo de ejecución? 634x296? –

+0

im ejecutando una pantalla panorámica de 1900x1280 y la ventana solo deja aproximadamente 1/2 pulgada en cada lado de la pantalla. (Bien 1/2 pulgada en la parte superior izquierda e inferior, tal vez 2 pulgadas a la derecha.pero todavía es muy grande) –

+0

posible duplicado de [Tamaño de la ventana cuando no se especifica SizeToContent] (http://stackoverflow.com/questions/1437099/window-size-when-sizetocontent-is-not-specified) – paxdiablo

Respuesta

32

Si crea un <Window/> con este código:

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

A continuación, cuando se ejecuta desde Visual Studio que se mostrará una ventana del mismo tamaño que el que se introdujo en su pregunta. Entonces esto no es algo que explícitamente hiciste.

Lo que ha encontrado es el tamaño calculado predeterminado de un WPF Window. Para los diferentes resultados, especifique un parámetro SizeToContent en la ventana, como se señaló paxdiablo, o explícitamente establecer el tamaño de la ventana con los MinHeight, MaxHeight, Height, MinWidth, MaxWidth y/o Width propiedades.

+0

Una respuesta muy clara, bien escrita y precisa. +1. –

+3

Por cierto, si crea una ventana en MFC, Win32 o Win16, descubrirá que obtiene el mismo tamaño predeterminado. Por ejemplo, el código de Win32 'CreateWindow (szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);' le ofrece la misma ventana de tamaño que WPF. WPF no está seleccionando el tamaño predeterminado: Windows lo hace por sí mismo, utilizando un algoritmo que se ha mantenido prácticamente igual desde que salió Windows 2.0 en 1987. –

+0

Eso se calcula a partir del tamaño de la pantalla principal, entonces, ¿no? –

7

¿Por qué no acaba de añadir un:

Height="296" Width="634" 

a la definición Window? No estoy seguro de dónde viene el tamaño predeterminado, pero he establecido tamaños específicos en mi ventana para evitar esto. Luego cambio el tamaño dinámicamente en el código de inicio de la aplicación.

Espero que WPF tenga una característica similar a pack donde establece recursivamente controles basados ​​en los tamaños preferidos de los subcontroles (Swing y wxPython ambos tenían esta característica) por lo que es posible que desee ir a buscar eso .


En realidad, un poco de búsqueda ha aparecido la propiedad Window.SizeToContent que puede ser lo que estás buscando. Su valor predeterminado es Manual pero, si lo configura en uno de los otros valores (Width, Height o WidthAndHeight), es posible que vea una mejor presentación.

De hecho, acabo de mellado hacia el portátil con Windows y entró:

SizeToContent="WidthAndHeight" 

en la definición de la ventana y se ve perfectamente tamaño. Entonces, sugiero intentarlo y ver si soluciona (o al menos funciona) su problema.

+0

Eso funciona, pero ¿Por qué está escogiendo un tamaño por defecto tan grande? –

+0

@Jason: no tengo idea, pero sospecho que está consultando las métricas del sistema para obtener el tamaño de la pantalla. Mi aplicación actual (mi primer WPF) se comporta de manera similar porque se centra y se aleja un poco de los bordes. Recuerdo leer en algún lugar que WPF predeterminaría al 60% del ancho y la altura del monitor principal si no lo especificabas, pero también que había muchas otras cosas que también podrían influir en él (aunque ahora no puedo encontrar esa referencia)) Creo que voy a ir con el 'SizeToContent' en el futuro (ver mi actualización) y no confiar en MS flunkie adivinando a la derecha :-) – paxdiablo

+0

Y finalmente encontré el enlace, lo que simplemente hace que esta pregunta sea una trampa: http://stackoverflow.com/questions/1437099/window-size-when-sizetocontent-is-not-specified – paxdiablo

6

En el diseño se ve pequeño porque tiene propiedades de diseño de combinación para la ventana.

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

Desde Grid es un diseño dinámico será estiramiento al ancho de la ventana & altura. Para restringir el tamaño de la ventana, debe mencionar Altura & Propiedades de ancho en la ventana.

Cuestiones relacionadas