TextBlock'u WPF ListBox'a kaydırmaya zorla


94

Mesajları görüntüleyen bir WPF liste kutum var. Sol tarafında bir avatar ve avatarın sağında dikey olarak yığılmış kullanıcı adı ve mesaj içerir. Mesaj metni kelime kaydırana kadar düzen iyidir, ancak bunun yerine liste kutusunda yatay bir kaydırma çubuğu alıyorum.

Google'da araştırdım ve benzer sorunlara çözümler buldum, ancak hiçbiri işe yaramadı.

<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>

Yanıtlar:


132

İçeriği TextBlockproperty kullanılarak sarılabilir TextWrapping. Yerine StackPanel, kullanım DockPanel/ Grid. Bir şey daha - kümesi ScrollViewer.HorizontalScrollBarVisibilityiçin özellik Disableddeğeri ListBox.

Güncelleme Hiddeniçin DisabledMatt Yorum dayalı. Teşekkürler Matt.


38
ScrollViewer.HorizontalScrollBarVisibility'yi "Gizli" yerine "Devre Dışı" olarak ayarlamanız gerektiğini düşünüyorum - aksi takdirde ListBox yatay olarak kaydırmayı deneyecek, sadece kaydırma çubuğunu görmeyeceksiniz.
Matt Hamilton

9

Sorun ListBox'ta bulunmayabilir. Üst denetimlerden biri yeterli alan sağlıyorsa, TextBlock kaydırılmaz, böylece sarmaya gerek kalmaz. Bunun nedeni bir ScrollViewer denetimi olabilir.


1
Teşekkürler! benim durumumda liste görünümünde yatay kaydırmanın devre dışı bırakılması sorunu çözdü ScrollViewer.HorizontalScrollBarVisibility = "Devre Dışı"
Ateik

2

TextBlock'un büyümesini önlemek istiyorsanız ve bunun liste kutusunun boyutuna sığmasını istiyorsanız, genişliğini açıkça ayarlamalısınız.

Dinamik olarak değiştirmek için, sabit bir değer anlamına gelmez, ancak onu görsel ağaçtaki uygun ana öğesine bağlamanız gerekir. Bunun gibi bir şeye sahip olabilirsiniz:

<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>

Çalışmazsa , Visual Studio'daki Canlı Görsel Ağaç ile uygun öğeleri (neye bağlanması gerekir) bulmaya çalışın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.