반응형
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
반응형
'programing' 카테고리의 다른 글
SQL Server XML 열의 값을 쿼리하려면 어떻게 해야 합니까? (0) | 2023.04.12 |
---|---|
Swift - 문자열을 여러 줄로 분할합니다. (0) | 2023.04.12 |
SQL 뷰를 사용하는 좋은 이유는 무엇입니까? (0) | 2023.04.12 |
일반적으로 어떤 열이 좋은 인덱스를 만드나요? (0) | 2023.04.12 |
git은 왜 기본적으로 빨리 감기 병합을 실행합니까? (0) | 2023.04.12 |