sourcecode

텍스트 블록을 WPF ListBox로 강제 랩하다

copyscript 2023. 4. 14. 22:02
반응형

텍스트 블록을 WPF ListBox로 강제 랩하다

메시지를 표시하는 WPF 목록 상자가 있습니다.왼쪽에는 아바타가, 오른쪽에는 사용자 이름과 메시지가 세로로 쌓여 있습니다.메시지 텍스트가 줄바꿈될 때까지 레이아웃은 정상이지만 목록 상자에 가로 스크롤 막대가 표시됩니다.

구글을 검색해서 비슷한 문제에 대한 해결책을 찾았지만, 어느 것도 효과가 없었습니다.

<ListBox HorizontalContentAlignment="Stretch"  ItemsSource="{Binding Path=FriendsTimeline}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Border BorderBrush="DarkBlue" BorderThickness="3" CornerRadius="2" Margin="3" >
                    <Image Height="32" Width="32"  Source="{Binding Path=User.ProfileImageUrl}"/>
                </Border>
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="{Binding Path=User.UserName}"/>
                    <TextBlock Text="{Binding Path=Text}" TextWrapping="WrapWithOverflow"/> <!-- This is the textblock I'm having issues with. -->
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

의 내용TextBlock속성을 사용하여 포장할 수 있습니다.TextWrapping대신StackPanel,사용하다DockPanel/Grid하나 더 - 세트ScrollViewer.HorizontalScrollBarVisibility의 재산.Disabled에 대한 가치ListBox.

갱신필Hidden로.Disabled맷의 코멘트에 근거하고 있습니다.고마워요 매트

이 문제는 ListBox에서 발견되지 않을 수 있습니다.부모 컨트롤 중 하나가 충분한 공간을 제공하여 줄 필요가 없는 경우 텍스트 블록은 줄바꿈되지 않습니다.ScrollViewer 컨트롤이 원인일 수 있습니다.

텍스트 블록이 커지는 것을 방지하고 목록 상자의 크기에 맞게 하려면 텍스트 블록의 너비를 명시적으로 설정해야 합니다.

동적으로 변경하려면 고정 값이 아니라 시각적 트리의 적절한 상위 요소에 바인딩해야 합니다.다음과 같은 것을 사용할 수 있습니다.

<ListBox ItemsSource="{Binding MyItems}" Name="MyListBox">

  <ListBox.Resources>
    <Style TargetType="ListBoxItem">
      <Setter Property="Width" 
              Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ScrollContentPresenter}, Path=ActualWidth}" />
    </Style>
  </ListBox.Resources>

  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Title}" TextWrapping="Wrap" />
    </DataTemplate>
  </ListBox.ItemTemplate>

</ListBox>

정상적으로 동작하지 않는 경우는, Visual Studio 의 Live Visual Tree 를 사용해 적절한 요소(무엇에 바인드 할 필요가 있는지)를 찾습니다.

언급URL : https://stackoverflow.com/questions/397257/force-textblock-to-wrap-in-wpf-listbox

반응형