WPF ListBox में रैप करने के लिए फोर्स टेक्स्टब्लॉक


94

मेरे पास एक WPF सूची बॉक्स है जो संदेशों को प्रदर्शित करता है। इसमें बाईं ओर एक अवतार होता है और उपयोगकर्ता नाम और संदेश अवतार के दाईं ओर खड़ी होती है। संदेश पाठ लपेटने तक लेआउट ठीक है, लेकिन इसके बजाय मुझे सूची बॉक्स पर एक क्षैतिज स्क्रॉल पट्टी मिलती है।

मैंने Googled और समान मुद्दों के समाधान पाए हैं, लेकिन उनमें से किसी ने भी काम नहीं किया।

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

जवाबों:


132

TextBlockसंपत्ति का उपयोग करके कैन की सामग्री को लपेटा जा सकता है TextWrapping। इसके बजाय StackPanel, का उपयोग करें DockPanel/ Grid। एक और बात - के ScrollViewer.HorizontalScrollBarVisibilityलिए Disabledमूल्य के लिए संपत्ति सेट करेंListBox

अपडेट किया गया Hiddenकरने के लिए Disabledमैट से टिप्पणी के आधार पर। धन्यवाद मैट।


38
मुझे लगता है कि आपको "छुपाया" के बजाय "अक्षम" करने के लिए स्क्रॉलव्यूअर। क्षैतिज क्षैतिज नियंत्रण प्रणाली को स्थापित करने की आवश्यकता है - अन्यथा लिस्टबॉक्स अभी भी क्षैतिज रूप से स्क्रॉल करने का प्रयास करेगा, आप बस स्क्रॉलबार नहीं देखेंगे।
मैट हैमिल्टन

9

समस्या सूची बॉक्स में स्थित नहीं हो सकती है। यदि कोई मूल नियंत्रण पर्याप्त स्थान प्रदान करता है, तो टेक्स्टब्लॉक रैप नहीं करेगा, ताकि इसे लपेटने की आवश्यकता न हो। यह एक स्क्रॉल दृश्य नियंत्रण के कारण हो सकता है।


1
धन्यवाद! मेरे मामले में सूची में क्षैतिज स्क्रॉल को अक्षम करने से समस्या तय हो गई है
स्क्रॉलव्यूअर।

2

यदि आप TextBlock को बढ़ने से रोकना चाहते हैं, और आप चाहते हैं कि यह सिर्फ लिस्टबॉक्स के आकार में फिट हो, तो आपको इसकी चौड़ाई स्पष्ट रूप से निर्धारित करनी चाहिए।

इसे गतिशील रूप से बदलने के लिए, इसका मतलब है कि एक ठीक मूल्य नहीं है, लेकिन आपको इसे दृश्य पेड़ में इसके उचित मूल तत्व से बांधने की आवश्यकता है। आप कुछ इस तरह से हो सकते हैं:

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

यदि यह काम नहीं करता है, तो विज़ुअल स्टूडियो में लाइव विज़ुअल ट्री के साथ उचित तत्वों (जो कि किस चीज़ से बांधा जाना है) को खोजने का प्रयास करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.