2009-06-05 4 views
17

In WinForms hatte Form eine ClientSize-Eigenschaft (von Control geerbt), die die Größe des Clientbereichs zurückgibt, d. H. Den Bereich innerhalb der Titelleiste und der Fensterrahmen.Wie bekomme ich die ClientSize eines WPF-Fensters?

Ich sehe nichts ähnliches in WPF: Es gibt keine ClientSize, ClientWidth, ClientHeight, GetClientSize(), oder irgendetwas anderes, das ich denke, um den Namen zu erraten.

Wie kann ich die Clientgröße eines WPF-Fensters ermitteln?

Antwort

11

Eine Möglichkeit, wie Sie es tun können, ist die oberste Kind Element, caste this.Content zu seinem Typ, und rufen Sie .RenderSize darauf, die Ihnen seine Größe geben wird.

<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 

edit:

wie Trent sagte ActualWidth und ActualHeight sind auch tragfähige Lösungen. Im Grunde einfachere Methoden, um das zu bekommen, was ich oben gesagt habe.

2

Ein Weg, es zu tun ist mit dem Code unten. 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

, die für mich bei 0.0 kommt –

+1

@WelshKing - Hat das Loaded-Ereignis ausgelöst? Es wird keine Größe geben, bis das Fenster gerendert ist. – Tristan