다음은 UserControl
을 포함하는 WPF 창입니다. UserControl
은 간단한 너비가없는 2 열의 Grid
입니다. 첫 번째 열에서는 간단한 TextBox
을 가로로 늘이기로 설정했습니다. 두 번째 열은 비어 있습니다.ColumnDefinitions의 너비가 동적 일 때 WPF가 원하지 않는 여백을 만듭니다?
윈도우의 너비를 줄이면 WPF는 내 오른쪽 UserControl
의 거대한 빈 공간을 사용할 수 있지만 작도합니다! 그것은 내 두 번째 열이 비어있는 경우에도 내 첫 번째 열과 같은 크기로 보이지만 이상한, 내 UserControl 외부에서 발생합니다 (그렇지 않으면 빈 공간이 분홍색 것입니다 ...)
MainWindow .XAML :
<Window x:Class="WPF_Grid_Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPF_Grid_Test"
Title="MainWindow" Height="350" Width="525">
<local:TestUserControl HorizontalAlignment="Left"/>
</Window>
UserControl.XAML : 나는 모든 Margins
및 0-Paddings
, 아니 설정 변경 시도
<UserControl x:Class="WPF_Grid_Test.TestUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Pink" Height="100">
<Grid Margin="0" ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBox Text="Why is WPF cropping me even though there's a huge blank space to eat into?" VerticalAlignment="Center" />
</Grid>
</UserControl>
.
UserControl
이 (왼쪽 대신에) 가운데로 설정되면 의 동작이 더 이상합니다! 오른쪽에 큰 여백을 만드는 대신 마진은 실제로 왼쪽과 오른쪽에 균등하게 배분됩니다. 내 UserControl
의 동적 크기 조정은 WPF가 사용 가능한 공간을 모두 사용한 후에 발생합니다. 어떤 프로그래머가 기대하는 것이 아닌가?
(내 실제 프로젝트는 실제로 각각 TextBlock에, 텍스트 상자와 버튼을 포함하는 3 열을 가지고 있지만 동작은 동일합니다 : WPF가 자신의 자동 생성 마진에 먹는 전에 UiElements의가립니다)
열 (즉, "자동")에 명확한 너비를 설정하면 WPF는 UserControl을 자르기 전에 해당 공백을 제거합니다. 그러나이 WPF 창 축소되면 UserControl 축소 할 수 없습니다.
내 첫 번째 질문은 이 WPF 버그가 아닙니까?
내 두 번째 질문, 방법 WPF는 그것을 표시 할 공간이 부족 정말을 일단 내 UserControl을 크기를 조정 시작되도록 열이 설정에?
이것은 .NET 4.0입니다. 비슷한 질문은 here이지만 실제로 해결책을 이해하지 못합니다.
업데이트 : 여기에 UserControl
에 대한 또 다른 샘플 코드가 있습니다. 열 너비를 설정할 때 공간이 정말 부족하면 제안 "자동"을 UserControl
는 윈도우가 수축 될 때 요소를 축소 중지하고 결국 오른쪽 요소를 잘라냅니다 :
<UserControl x:Class="WPF_Grid_Test.TestUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Pink" Height="100">
<Grid Margin="0" ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Text="Resize us" VerticalAlignment="Center" Grid.Column="0" />
<TextBox Text="only when" VerticalAlignment="Center" Grid.Column="1" />
<TextBox Text="you're out of space!" VerticalAlignment="Center" Grid.Column="2" />
</Grid>
</UserControl>
동작을 내가 노력하고있어 달성하기 위해 UserControl
은 창을 축소 할 때 DesiredSize
을 유지합니다. 그러나 은 창문이 빈 공간이 없을 때만입니다. UserControl
은 "축소"처리를 받아야합니다.
ColumnDefinitions에서 Width=Auto
을 제거하려고하면 오른쪽 끝에있는 요소의 크기가 어떻게 조정되는지 확인해야합니다. 전에 컨테이너에 공간이 부족합니다. 이것이 이것이 실제로 WPF 레이아웃 버그라고 생각하는 이유입니다.
이 값을 설정하면 내용에 따라 UserControl에 고정 너비가 부여됩니다. 이는 찾고자하는 동작이 아닙니다. UserControl 자체 크기를 조정하고 공간이 부족할 때 해당 요소를 자르기로 괜찮습니다. 위의 코드를 시도해 보면 Container *가 그것을 보여줄 수있는 공간을 가지고 있음에도 UserControl이 축소되었음을 알 수 있습니다. – Joe
나는 당신의 아이디어로 나의 초기 게시물을 업데이트하고 예상되는 동작을 제공하지 못하는 방법을 설명했다. – Joe