2009-06-05 18 views
17

En WinForms, Form tenía una propiedad ClientSize (heredada de Control), que devuelve el tamaño de su área de cliente, es decir, el área dentro de la barra de título y los bordes de la ventana.¿Cómo obtener un tamaño de cliente de ventana de WPF?

No veo nada similar en WPF: no hay ClientSize, ClientWidth, ClientHeight, GetClientSize(), ni nada que pueda adivinar el nombre.

¿Cómo hago para obtener el tamaño de cliente de una ventana de WPF?

Respuesta

11

Una forma de hacerlo es tomar el elemento secundario más alto, eche this.Content en su tipo, y llame al .RenderSize, que le dará su tamaño.

<Window x:Class="XML_Reader.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="400" Width="600" WindowStyle="SingleBorderWindow"> 
    <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
    </Grid> 
</Window> 

((Grid)this.Content).RenderSize.Height 
((Grid)this.Content).RenderSize.Width 

edición:

como dijo Trent, ActualWidth y ActualHeight también son soluciones viables. Básicamente métodos más fáciles de obtener lo que puse arriba.

2

Una forma de hacerlo es con el siguiente código. XAML:

<Window x:Class="WpfApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:WpfApplication1" 
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded"> 
    <Canvas> 
    </Canvas> 
</Window> 

C#:

using System.Windows; 

using System.IO; 
using System.Xml; 
using System.Windows.Controls; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      double dWidth = -1; 
      double dHeight = -1; 
      FrameworkElement pnlClient = this.Content as FrameworkElement; 
      if (pnlClient != null) 
      { 
       dWidth = pnlClient.ActualWidth; 
       dHeight = pnlClient.ActualHeight; 
      } 
     } 
    } 
} 
10
var h = ((Panel)Application.Current.MainWindow.Content).ActualHeight; 
var w = ((Panel)Application.Current.MainWindow.Content).ActualWidth; 
+0

que sale en el 0,0 por mí –

+1

@WelshKing - ha disparado el evento Loaded? No habrá un tamaño hasta que la ventana se haya renderizado. – Tristan

Cuestiones relacionadas