WPF DockPanel은 "채워진"컨트롤의 원하는 크기를 존중하지 않습니다.

StackOverflow https://stackoverflow.com/questions/2403454

  •  18-09-2019
  •  | 
  •  

문제

다음 XAML이 있습니다 (간단한 경우 단순화되었지만 XAMLPAD 또는 KAXAML에서 문제를 재현 할 것입니다).

<DockPanel Width="400">
    <TextBlock DockPanel.Dock="Left" TextWrapping="Wrap">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
        Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
        Aenean gravida tempus lectus ut ornare. 
            Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
    </TextBlock>
    <Button MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
</DockPanel>

내 문제는 버튼이 최소 100px의 공간을 가져 와서 텍스트가 그 공간을 떠나기 위해 적절하게 포장하기를 원한다는 것입니다. 그러나 텍스트가 가능한 한 400px에 가까운 텍스트가 감싸고 버튼이 잘립니다.

출력을 스누핑하면 버튼이 원하는 100px에서 렌더링되고 있지만 Dockpanel의 측면에서 잘린 것을 볼 수 있습니다.

도크를 뒤집는 경우 (버튼이 "오른쪽"으로 도킹되고 텍스트 블록이 채워집니다) 원하는 레이아웃이 발생하지만 불행히도 주변 레이아웃으로 인해 옵션이 아닙니다.

dockpanel을 만들 수있는 일이 있습니까? a) 클립과 b) minwidth를 존중하는 방식으로 레이아웃이 있습니까? 아니면 대체 레이아웃 메커니즘을 찾았습니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

아, 나는 멍청하고 너무 오랫동안 같은 코드를 쳐다보고 있었다. 거친 단순한 솔루션은 그리드를 사용하는 것이 었습니다.

<Grid Width="400">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="Auto" />
  </Grid.ColumnDefinitions>
  <Button  Grid.Column="1" MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
  <TextBlock TextWrapping="Wrap" Grid.Column="0">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
      Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
      Aenean gravida tempus lectus ut ornare. 
      Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
  </TextBlock>
</Grid>

내 자신의 바보 같은 질문에 대해 사과합니다!

다른 팁

버튼을 오른쪽에 도킹하고 텍스트 블록이 나머지를 채우도록해야합니다. 다음은 해당 XAML입니다.

<DockPanel Width="400">
    <Button DockPanel.Dock="Right" MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Left">Hello world</Button>
    <TextBlock TextWrapping="Wrap">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Vestibulum massa metus, ornare in fringilla nec, fringilla at orci.
        Nunc pharetra enim sit amet sapien aliquet eu euismod turpis vehicula.
        Aenean gravida tempus lectus ut ornare. 
        Nullam massa augue, suscipit vel consectetur fringilla, pretium vitae neque.
    </TextBlock>
</DockPanel>

친애하는,
올리버 한나피

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top