2010-11-22 4 views
8

내 창 레이아웃으로 WPF Grid를 사용하고 있습니다. 그것은 두 개의 열과 임의의 수의 행을가집니다. 첫 번째 열은 특별히 라벨에 사용되고 두 번째 열은 사용자 입력 필드 (예 : TextBox, ComboBox 등)에 사용됩니다. 내 요구 사항은 다음과 같습니다WPF TextBlock.TextTrimming이 자동 크기 ColumnDefinition에서 작동하지 않습니다.

  1. 첫 번째 열에는 첫 번째 요구 사항을 무시하는 경우를 제외하고 그 내용에 180
  2. 첫 번째 열해야 크기의 50의 최소 폭 및 최대 폭이 있어야합니다.
  3. 두 번째 열은 나머지 모든 공간을 차지해야합니다.

나는 아래의 XAML을 시도 : 라벨 "와 같은 무언가로 잘립니다"180 개 단위에 맞지 않는 라벨을 "

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" MinWidth="50" MaxWidth="180" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <TextBlock Text="First Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Column="1" Text="{Binding FirstName}" /> 

    <TextBlock Grid.Row="1" Text="Family Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" /> 

    <TextBlock Grid.Row="2" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" /> 
</Grid> 

나는 제 3의 열 라벨 것으로 기대했다 그 원 ... ". 대신, "t 레이블"의 절반이 누락되어 "레이블이 나타나지 않을 것"으로 클립됩니다.

웹에서 어딘가에있는 다른 접근 방식을 시도했습니다.

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition x:Name="LabelColumn" Width="Auto" MinWidth="50" MaxWidth="180" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <TextBlock Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="First Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Column="1" Text="{Binding FirstName}" /> 

    <TextBlock Grid.Row="1" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Family Name" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" /> 

    <TextBlock Grid.Row="2" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" /> 
    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" /> 
</Grid> 

응용 프로그램을 실행할 때 Expression Blend (가끔은 ...) 작업이 끝났지 만 결국 응용 프로그램을 실행하지 않았습니다. 달릴 때, 모든 상표는 완전하게 사라졌다. 조사 창을 통해 모든 TextBlock의 실제 너비가 0이고 LabelColumn.ActualWidth가 80 인 것을 보았습니다.

다른 옵션이 있습니까? 열 정의에 MinWidthMaxWidth을 설정하는 것은 항상 렌더링에 영광되지 않는

답변

7

당신은 TextBlock의에 MinWidthMaxWidth 설정이 필요합니다. ActualWidth을 바인딩 표현식에 사용하면 복수 렌더링 과정에서 ActualWidth이 설정되어 예기치 않은 결과가 발생할 수 있으므로 문제가 될 수 있습니다.

관련 문제