programing

WPF에서 *를 사용하여 그리드 열의 너비를 프로그래밍 방식으로 설정

lastcode 2023. 4. 12. 22:25
반응형

WPF에서 *를 사용하여 그리드 열의 너비를 프로그래밍 방식으로 설정

wpf 그리드를 프로그래밍 방식으로 설정합니다.

2개의 컬럼으로 그리드를 설정할 수 있도록 하고 싶다.첫 번째 컬럼은 사용 가능한 공간의 20%를 차지하고 두 번째 컬럼은 80%를 차지합니다.xaml에서는 * 연산자를 사용하지만 프로그래밍 방식으로 이 작업을 수행하는 방법을 찾을 수 없습니다.

Xaml에서는 다음을 수행합니다.

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition width="20*" />
    <ColumnDefinition width="80*" />
</Grid>

하고 싶은 코드:

Grid grid = new Grid();
grid.ColumnDefinitions.Add( new ColumnDefinition(20*) );
grid.ColumnDefinitions.Add( new ColumnDefinition(80*) );

조언 좀 해 주세요.

Grid grid = new Grid();
ColumnDefinition c1 = new ColumnDefinition();
c1.Width = new GridLength(20, GridUnitType.Star);
ColumnDefinition c2 = new ColumnDefinition();
c2.Width = new GridLength(80, GridUnitType.Star);
grid.ColumnDefinitions.Add(c1);
grid.ColumnDefinitions.Add(c2);

페이지에 몇 개의 버튼(수평으로 정렬)이 있고, 상태에 따라 특정 버튼을 숨기거나 표시해야 한다고 가정합니다.

<Grid HorizontalAlignment="Center" Grid.Column="1" Width="340" VerticalAlignment="Center" Background="Transparent">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" x:Name="colOne"></ColumnDefinition>
        <ColumnDefinition Width="0" x:Name="colTwo"></ColumnDefinition>
        <ColumnDefinition Width="0" x:Name="colThree"></ColumnDefinition>
        <ColumnDefinition Width="0" x:Name="colFour"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Button x:Name="btnOne"  Grid.Column="0" Height="50" Width="50" Content="One" Cursor="Hand" />
    <Button x:Name="btnTwo"  Grid.Column="1" Height="50" Width="50" Content="Two" Cursor="Hand" />
    <Button x:Name="btnThree"  Grid.Column="2" Height="50" Width="50" Content="Thre" Cursor="Hand" />
    <Button x:Name="btnFour"  Grid.Column="3" Height="50" Width="50" Content="Four" Cursor="Hand" />

</Grid>

여기서 btnOne은 실행 시 페이지에 표시됩니다.btnOne도 중앙에 정렬됩니다.이제 3과 4를 표시하고 1을 클릭했을 때 1을 숨기려면 다음 코드를 사용할 수 있습니다.

private void btnOne_Click(object sender, RoutedEventArgs e)
{
    SetGridColWidth(colOne, false);
    SetGridColWidth(colThree, true);
    SetGridColWidth(colFour, true);
}

private void SetGridColWidth(ColumnDefinition column, bool show)
{
    if (show)
        column.Width = new GridLength(2, GridUnitType.Star);
    else
        column.Width = new GridLength(0);
}

실행 시 버튼 표시 여부를 전환할 수 있습니다.

이게 누군가에게 도움이 되길 바라!

MVVM 어프로치

표시(XAML)

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{Binding FirstColumn}"/>
        <ColumnDefinition Width="{Binding SecondColumn}"/>
    </Grid.ColumnDefinitions>
</Grid>

View Model (C#)

public class MyViewModel : BindableBase
{
    private GridLength _firstColumn;
    private GridLength _secondColumn;

    public MyViewModel()
    {
        _firstColumn = new GridLength(75, GridUnitType.Star);
        _secondColumn = new GridLength(25, GridUnitType.Star);
    }

    public GridLength FirstColumn
    {
        get { return _firstColumn; }
        set { SetProperty(ref _firstColumn, value); }
    }

    public GridLength SecondColumn
    {
        get { return _secondColumn; }
        set { SetProperty(ref _secondColumn, value); }
    }

    private void NotifyToggleFullScreen(bool isToggleExpansion)
    {
        if (isToggleExpansion)
        {
            FirstColumn = new GridLength(0, GridUnitType.Auto);
            SecondColumn = new GridLength(100, GridUnitType.Star);
        }
        else
        {
            FirstColumn = new GridLength(75, GridUnitType.Star);
            SecondColumn = new GridLength(25, GridUnitType.Star);
        }
    }
}

auto를 사용할 수 있습니다.

var c1 = new ColumnDefinition() { Width = GridLength.Auto };

언급URL : https://stackoverflow.com/questions/9803710/programmatically-setting-the-width-of-a-grid-column-with-in-wpf

반응형