2009-06-05 56 views
17

在WinForms中,Form有一個ClientSize屬性(從Control繼承),它返回其客戶區的大小,即標題欄和窗口邊界內的區域。如何獲取WPF窗口的ClientSize?

我在WPF中沒有看到任何類似的東西:沒有ClientSize,ClientWidth,ClientHeight,GetClientSize()或其他任何可以猜到的名字。

如何獲取WPF窗口的客戶端大小?

回答

11

你可以這樣做的一種方法是取最頂端的子元素,將其this.Content轉換爲它的類型,並調用.RenderSize,這會給你它的大小。

<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 

編輯:

爲特倫特說,ActualWidthActualHeight也是可行的解決方案。基本上更容易的方法來獲得我上面的東西。

2

一種方法是使用下面的代碼。 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

是0.0出來我 – 2012-06-13 10:45:58