2009-06-05 41 views
17

Trong WinForms, Biểu mẫu có thuộc tính ClientSize (được kế thừa từ Điều khiển), trả về kích thước vùng khách hàng của nó, tức là vùng bên trong thanh tiêu đề và đường viền cửa sổ.Làm thế nào để có được một cửa sổ của WPF ClientSize?

Tôi không thấy bất kỳ điều gì tương tự trong WPF: không có ClientSize, ClientWidth, ClientHeight, GetClientSize() hoặc bất kỳ điều gì khác mà tôi có thể nghĩ để đoán tên.

Tôi làm cách nào để nhận kích thước máy khách của Cửa sổ WPF?

Trả lời

11

Một cách bạn có thể làm là lấy phần tử con nhiều nhất, hãy đúc this.Content vào loại của nó và gọi .RenderSize trên đó, sẽ cho bạn kích thước của nó.

<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 

chỉnh sửa:

như Trent nói, ActualWidthActualHeight cũng là giải pháp khả thi. Về cơ bản phương pháp dễ dàng hơn để có được những gì tôi đặt ở trên.

2

Một cách để làm điều đó là với mã bên dưới. 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

mà đi ra ở mức 0.0 cho tôi –

+1

@WelshKing - Có sự kiện Loaded sa thải? Sẽ không có kích thước cho đến khi cửa sổ hiển thị. – Tristan

Các vấn đề liên quan