visual ventanas usar tutorial studio navegacion español entre como wpf autoresize

ventanas - cómo hacer que los controles cambien de tamaño en wpf, equivalente de las propiedades de anclaje/acoplamiento



wpf tutorial (5)

Asumo que el control que no cambia de tamaño es su control personalizado.

  • Utilice DockPanel como un contenedor.
  • Elimine las propiedades explícitas de Ancho y Alto de su control.

Si trabaja en el VS2008, esto causa inconvenientes, ya que el control se colapsaría al tamaño mínimo cuando se viera en el diseñador.

Las expresiones Mezcla y comenzando desde VS2010 respetan el espacio de nombres del diseñador, por lo que puede especificar el tiempo de diseño y controlar el tamaño.

Para eso agrega lo siguiente a tu control:

<UserControl ... xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignWidth="WWW" d:DesignHeight="HHH"> .... </UserControl>

d: DesignWidth yd: DesignHeight especifican el ancho y la altura del tiempo de diseño.

He leído tantas soluciones este problema. Cada uno de ellos no logra resolver mi problema. no importa en qué contenedor coloco el control o qué propiedades configuro en el control / contenedor, no se moverá. Tengo un visor de desplazamiento con un control dentro. Quiero que cambie de tamaño con la ventana cuando el usuario la cambie de tamaño en tiempo de ejecución. Todo lo que necesito es anchor = arriba, abajo, izquierda, derecha. No entiendo por qué esto es tan difícil de alcanzar en WPF y por qué los objetos contenedores y todo tipo de asignaciones de propiedades deben involucrarse para lograr lo que una sola propiedad puede en los Formularios. pero cada solución a este problema todavía hace que mi control se mantenga exactamente en el tamaño de su tiempo de diseño, ya que la ventana se redimensiona en tiempo de ejecución. ¿Cuál es la forma más sencilla de controlar el tamaño del control dinámico en wpf?


El control debe estirarse, eso es todo lo que debería haber:

<MyControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

Stretch reemplaza los valores de ajuste a ambos lados respectivos.

Para obtener ayuda sobre los paneles, consulte este resumen . Consulte también la documentación del sistema de diseño .

La mayoría de los controles se extienden automáticamente; si tiene un DataGrid, también debería Kaxaml , pruebe esta muestra en Kaxaml , contiene un DataGrid y un TextBlock que muestra su tamaño:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <DataGrid Name="grid"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Name}" Header="Name"/> <DataGridTextColumn Binding="{Binding Tag}" Header="Occupation"/> </DataGrid.Columns> <FrameworkElement Name="Skeet" Tag="Programmer"/> <FrameworkElement Name="Gravell" Tag="Programmer"/> <FrameworkElement Name="Steve" Tag="Coffee Getter"/> </DataGrid> <TextBlock Grid.Row="1"> <TextBlock.Text> <MultiBinding StringFormat="{}{0}, {1}"> <Binding ElementName="grid" Path="ActualWidth"/> <Binding ElementName="grid" Path="ActualHeight"/> </MultiBinding> </TextBlock.Text> </TextBlock> </Grid> </Window>

Si ajusta la ventana hacia abajo, aparecerán las barras de desplazamiento de DataGrid.


Esta pregunta es vieja pero, desde que encontré mi aquí, pensé que iba a tirar mi solución. El siguiente código es para un control de pestaña con dos pestañas y cada pestaña contiene un control para llenar la pestaña. Eliminé el ancho y la altura establecidos explícitamente, y configuré las alineaciones horizontal y vertical en automático en todos los controles que quería cambiar de tamaño. El control de pestaña se estira en la ventana principal. Los controles en las pestañas se extienden para llenar las pestañas. La información vino de las respuestas aquí. Acabo de poner un ejemplo completo.

Espero que sea útil para alguien.

<TabControl HorizontalAlignment="Stretch" Margin="91,0,0,0" Name="tabControl1" VerticalAlignment="Stretch" > <TabItem Header="DataGrid" Name="tabItem1"> <Grid> <DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" Name="dgFTPLog" VerticalAlignment="Stretch" Margin="6,6,0,0" /> </Grid> </TabItem> <TabItem Header="Log" Name="tabItem2"> <Grid> <TextBox HorizontalAlignment="Stretch" Margin="6,6,0,0" Name="txtLog" VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" TextChanged="txtLog_TextChanged" /> </Grid> </TabItem> </TabControl>


También me he topado con estos problemas. e Intentó enlazar con los controles primarios de las propiedades ActualHeight y ActualWidth, excepto que esto solo funciona si lo hace a través del código detrás de XAML.

es decir, XAML

private void parentControl_SizeChanged(object sender, SizeChangedEventArgs e) { childControl.Height = parentControl.ActualHeight; childControl.Width = parentControl.ActualWidth; }

en el código .cs detrás

private void parentControl_SizeChanged(object sender, SizeChangedEventArgs e) { childControl.Height = parentControl.ActualHeight; childControl.Width = parentControl.ActualWidth; }


Esto también me causó dolor y AlexK me ayudó a ver la luz. El truco NO es establecer la altura y el ancho ... Establezca esto en AUTO y use MARGIN para establecer el tamaño. Establezca HORIZONTALALIGNMENT y VERTICALALIGNMENT en STRETCH y, a continuación, la funcionalidad de anclaje funcionará.