programing

WPF 사용자 컨트롤을 창까지 넓히려면 어떻게 해야 합니까?

css3 2023. 4. 15. 09:12

WPF 사용자 컨트롤을 창까지 넓히려면 어떻게 해야 합니까?

사용자 컨트롤이 있는 창이 있으며 사용자 컨트롤 너비를 창 너비와 동일하게 하고 싶습니다.어떻게 하는 거야?

사용자 컨트롤은 수평 메뉴이며 다음 세 개의 열이 있는 그리드를 포함합니다.

<ColumnDefinition Name="LeftSideMenu" Width="433"/>
<ColumnDefinition Name="Middle" Width="*"/>
<ColumnDefinition Name="RightSideMenu" Width="90"/>

그래서 두 번째 컬럼을 기준으로 사용자 컨트롤을 100% 너비로 늘려야 합니다.

편집:

그리드를 사용하고 있으며, 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>

사용자 컨트롤의 xaml 파일에서 사용자 컨트롤의 너비가 설정되지 않았는지 확인해야 합니다.Width="..."를 삭제하기만 하면 됩니다!

EDIT: 테스트한 코드는 다음과 같습니다.

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>

Window 1.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>

WPF의 캔버스는 자동 레이아웃을 많이 지원하지 않습니다.이 때문에 (수평 Alignment와 Vertical Alignment는 예상대로 동작하지 않습니다)하지만 컨트롤의 폭과 높이를 캔버스의 실제 폭/실제 높이에 바인딩하는 사소한 수정으로 작업하기 위한 코드를 받았습니다.

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

캔버스가 문제예요캔버스가 제공하는 레이아웃이나 Z-Order의 "스쿼싱"(PhotoShop의 평탄한 명령어) 기능을 실제로 활용하지 않는다면 WPF에서 예상한 것과 다르게 작동하는 컨트롤의 기호에 대해 배울 필요가 없도록 그리드 같은 컨트롤을 사용하는 것이 좋습니다.

캔버스가 당신의 창에 중요합니까?그렇지 않으면 제거해 보고 그리드를 기본 패널로 유지하십시오.일반적으로 그리드가 사용 가능한 모든 공간을 차지하는 반면 캔버스는 지정되지 않는 한 크기가 없습니다.캔버스 내부에 그리드에 사용 가능한 공간이 없습니다.

사용자 컨트롤에서 수평 정렬을 스트레치로 설정하고 폭을 자동으로 설정합니까?

UserControl을 어떤 컨테이너에 추가하시겠습니까?일반적으로 그리드에 컨트롤을 추가하면 해당 행/열이 특정 너비로 구속되지 않는 한 사용 가능한 공간을 채우도록 확장됩니다.

대신 사용자 컨트롤에서 폭과 높이를 사용합니다. 최소 높이와 최소 너비를 사용하십시오.그 후 UC를 적절하게 설정하여 다른 창으로 확장할 수 있습니다.

WPF에서 본 것처럼 Microsoft는 Windows의 속성과 동작에 대해 다시 생각해 보았습니다만, 지금까지 WPF에서는 컨트롤이 있습니다만, 새로운 관점에서는 오래된 Windows 폼으로부터 아무것도 빠뜨리지 않았습니다.

이 방법은 효과가 있었습니다. UserControl에 폭이나 높이를 할당하지 말고 상위 창에서 행과 열의 정의를 정의하십시오.

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

언급URL : https://stackoverflow.com/questions/462390/how-to-stretch-in-width-a-wpf-user-control-to-its-window