2017-12-22 27 views
3

내 XAML에는 일정한 양의 가로 공간이 있습니다. 그 안에는 단추가 뒤 따르는 텍스트 (길이가 알려지지 않은)를 넣어야합니다. 버튼은 텍스트 바로 뒤에 있어야합니다. 나는 XAML 다음 사용하고 있습니다 : TextBlock의 텍스트가 짧은 경우WPF 그리드 사이징 자동 대 스타

<Border Name="Boundaries" MaxWidth="500" MinWidth="500" Height="20"> 
     <Grid> 
     <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <TextBlock Grid.Column="0" TextTrimming="CharacterEllipsis"> 
       Lorem ipsum dolor sit amet, pri ex option legendos. Ludus solet at mel, facilisis urbanitas nam ad. 
      </TextBlock> 
     <Button Grid.Column="1">Button</Button> 
    </Grid> 
</Border> 

모든 것이 잘 작동, 텍스트가 충분히있다 그러나 때, TextBlock의 부모 요소를 오버플로 버튼이 표시되지 않습니다. 이 문제를 해결하기 위해 첫 번째 열 정의의 너비를 *로 설정할 수 있지만이 옵션은 버튼이 항상 오른쪽에 있음을 의미합니다 (텍스트가 단일 단어이지만 텍스트 바로 다음에 필요함).

이전에는 부모의 ActualSize에서 첫 번째 열 정의 트로프 변환기의 MaxWidth를 설정하여 비슷한 문제를 해결했지만 매우 복잡하고 매우 신뢰할 수 없습니다.

그런 기본 레이아웃 요구 사항이 WPF의 일부가 될 것으로 보이지만 아무것도 찾을 수 없습니다. 내가 놓친 게 있니? enter image description here

+0

사용 StackPanel의 : 수평, 또는 WrapPanel – sTrenat

답변

4

당신이 이것을 달성하기 위해 DockPanel을 사용할 수

나는 이런 식으로 뭔가를 할 수 있습니다. 같은 뭔가 :

<Border Name="Boundaries" MaxWidth="500" MinWidth="500" Height="20"> 
    <DockPanel HorizontalAlignment="Left" LastChildFill="False"> 
     <Button DockPanel.Dock="Right">Button</Button> 
     <TextBlock DockPanel.Dock="Right" TextTrimming="CharacterEllipsis"> 
      Lorem ipsum dolor sit amet, pri ex option legendos. Ludus solet at mel, facilisis urbanitas nam ad. 
     </TextBlock> 
    </DockPanel> 
</Border> 
+0

내가 분을 해요 같은데 말 : –

+1

@appa 깨갱 당신이 그것을 삭제하기 전에 깨갱 거리는 소리, 당신의 대답을 보았다. 어떻게 StackPanel을 사용하여 이것을 할 수 있습니까? –

+0

@PaoloGo 게시 한 후 StackPanel을 사용하는 것이 훨씬 더 복잡하다는 것을 깨달았습니다. 'TextBlock'에 무한한 공간을주기 때문에'Button'에 약간의 공간을 남겨두기 위해'StackPanel'의'Width'를 기반으로 한'MaxWidth'를 설정할 필요가 있습니다. –

0

는 레이아웃의 크기를 얻기 위해 열을 사용하지만 실제 레이아웃에 열을 사용하지 않는 필요가 소정 크기를 시작하지 않고이 작업을 수행합니다. 두 개의 열을 추가 한 다음 첫 번째 열에 TextBlock의 크기를 가져올 수있는 테두리를 넣습니다. 이 예제에서는 단추의 너비를 두 번째 열의 너비 바인딩합니다,이 방법은 단추 텍스트를 변경하면 여전히 작동합니다. 방향으로

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="{Binding ElementName=mybutton, Path=ActualWidth}" /> 
     </Grid.ColumnDefinitions> 
     <Border Grid.Column="0" Name="myborder"/> 

     <StackPanel Orientation="Horizontal" Grid.ColumnSpan="2"> 
      <TextBlock MaxWidth="{Binding ElementName=myborder, Path=ActualWidth}" Text="test text" TextTrimming="CharacterEllipsis"/> 
      <Button Name="mybutton" Content="button" /> 
     </StackPanel> 
    </Grid>