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>
Author: Victor Rodrigues, 2009-01-20

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>
 41
Author: Arjan Einbu,
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.

 21
Author: Michael,
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.

 7
Author: Bubblewrap,
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?

 2
Author: Jason Miesionczek,
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).

 1
Author: Andy,
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.

 1
Author: Leonardo Nowaczyk,
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>

 0
Author: Shahid,
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