ventanas navegacion modales hechas entre ejemplos aplicaciones wpf size

modales - navegacion entre ventanas wpf



¿Cómo obtener el tamaño de cliente de una ventana de WPF? (4)

En WinForms, Form tenía una propiedad de tamaño de cliente (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.

No veo nada similar en WPF: no hay ClientSize, ClientWidth, ClientHeight, GetClientSize (), o cualquier otra cosa que se me ocurra para adivinar el nombre.

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


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>

DO#:

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; } } } }


Grid una Grid con VerticalAlignment=Top . Como resultado, la Cuadrícula desafortunadamente ya no llenó la ventana principal (que es su comportamiento predeterminado, pero la propiedad VerticalAligment la estropea).

Lo resolví poniendo un Border vacío alrededor de la cuadrícula. Este borde llena el contenido completo de la ventana, tiene las mismas dimensiones que el borde predeterminado que tiene una ventana wpf de todos modos.

Para obtener la cuadrícula para llenar la ventana principal, utilicé el enlace:
<Border BorderThickness="0" x:Name=Main> <Grid VerticalAlignment="Top" Height="{Binding ElementName=Main, Path=ActualHeight}"> ... </Grid> </Border>


Una forma en que podría hacerlo es tomar el elemento superior más secundario, convertir esto. this.Content en this.Content con su tipo y llame a .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

editar:

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


var h = ((Panel)Application.Current.MainWindow.Content).ActualHeight; var w = ((Panel)Application.Current.MainWindow.Content).ActualWidth;