Cómo estirar en ancho un control de usuario WPF a su ventana?
Tengo una Ventana con mi control de usuario y me gustaría hacer que el ancho de usercontrol sea igual al ancho de la ventana. ¿Cómo hacer eso?
El control de usuario es un menú horizontal y contiene una cuadrícula con tres columnas:
<ColumnDefinition Name="LeftSideMenu" Width="433"/>
<ColumnDefinition Name="Middle" Width="*"/>
<ColumnDefinition Name="RightSideMenu" Width="90"/>
Esa es la razón por la que quiero que el ancho de la ventana, para estirar el control de usuario al 100% de ancho, con la segunda columna relativa.
EDITAR:
Estoy usando una cuadrícula, ahí está el código para Window:
<Window x:Class="TCI.Indexer.UI.Operacao"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles"
Title=" " MinHeight="550" MinWidth="675" Loaded="Load" ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen" WindowState="Maximized" Focusable="True"
x:Name="windowOperacao">
<Canvas x:Name="canv">
<Grid>
<tci:Status x:Name="ucStatus"/> <!-- the control which I want to stretch in width -->
</Grid>
</Canvas>
</Window>
7 answers
Debe asegurarse de que su usercontrol no ha establecido su ancho en el archivo xaml del usercontrol. Simplemente borra el Width="..."a partir de ella y usted es bueno para ir!
EDIT: Este es el código con el que lo probé:
SOUserAnswerTest.xaml:
<UserControl x:Class="WpfApplication1.SOAnswerTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Name="LeftSideMenu" Width="100"/>
<ColumnDefinition Name="Middle" Width="*"/>
<ColumnDefinition Name="RightSideMenu" Width="90"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0">a</TextBlock>
<TextBlock Grid.Column="1">b</TextBlock>
<TextBlock Grid.Column="2">c</TextBlock>
</Grid>
</UserControl>
Window1.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="415">
<Grid>
<local:SOAnswerTest Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="2"/>
</Grid>
</Window>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-20 18:56:11
El lienzo en WPF no proporciona mucho soporte de diseño automático. Intento alejarme de ellos por esta razón (HorizontalAlignment y VerticalAlignment no funcionan como se esperaba), pero conseguí que su código funcionara con estas modificaciones menores (vinculando el Ancho y la Altura del control al ActualWidth/ActualHeight del lienzo).
<Window x:Class="TCI.Indexer.UI.Operacao"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles"
Title=" " MinHeight="550" MinWidth="675" Loaded="Load"
ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen"
WindowState="Maximized" Focusable="True" x:Name="windowOperacao">
<Canvas x:Name="canv">
<Grid>
<tci:Status x:Name="ucStatus" Width="{Binding ElementName=canv
, Path=ActualWidth}"
Height="{Binding ElementName=canv
, Path=ActualHeight}"/>
<!-- the control which I want to stretch in width -->
</Grid>
</Canvas>
El Lienzo es El problema aquí. Si en realidad no está utilizando las características que ofrece canvas en términos de diseño o "aplastamiento" en orden Z (piense en el comando aplanar en PhotoShop), consideraría usar un control como una cuadrícula para que no tengas que aprender las peculiaridades de un control que funciona de manera diferente a lo que esperas con WPF.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-08 05:11:25
¿El Lienzo es crucial en tu ventana? Si no, intente quitarlo y mantenga la cuadrícula como el panel principal. El lienzo no tiene tamaño a menos que se especifique, mientras que una cuadrícula normalmente ocupa todo el espacio disponible. Dentro del Lienzo, la Cuadrícula no tendrá espacio disponible.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-21 13:37:39
Establecer la HorizontalAlignment para Estirar, y el Ancho para Auto en el control de usuario logra los resultados deseados?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-20 18:30:39
¿A qué contenedor está agregando el UserControl? Generalmente, cuando agrega controles a una Cuadrícula, se estirarán para llenar el espacio disponible (a menos que su fila/columna esté limitada a un cierto ancho).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-20 18:26:30
En su lugar use Width y Height en los controles de usuario, use minHeight y MinWidth. Luego puede configurar bien la UC, y podrá estirarse dentro de otra ventana.
Bueno, como estoy viendo en WPF Microsoft hizo un replanteamiento de las propiedades y comportamientos de Windows, pero hasta ahora, no me perdí nada de antiguos formularios de Windows, en WPF los controles están allí, pero en un nuevo punto de vista.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-05 00:05:06
Esto funcionó para mí. no asigne ningún ancho o alto al control de usuario y defina la definición de fila y columna en la ventana principal.
<UserControl x:Class="MySampleApp.myUC"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
>
<Grid>
</Grid>
</UserControl>
<Window xmlns:MySampleApp="clr-namespace:MySampleApp" x:Class="MySampleApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="auto" Width="auto" MinWidth="1000" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<MySampleApp:myUC Grid.Column="0" Grid.Row="0" />
</Grid>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-22 02:20:22