Parth Sehgal
Parth Sehgal

Reputation: 66

Stackpanel "breaks" and has black background when the content is side is too much

I have the follow XAML:

       <ContentControl HorizontalAlignment="Left" HorizontalContentAlignment="Left" Content="{Binding TotalReviewWordBlock}" Width="465" Margin="5,10,0,5" Foreground="#FF2D2D2D"  Background="White"/>

and its binded to the following property:-

      public StackPanel TotalReviewWordBlock
    {
        get
        {
            StackPanel st = new StackPanel();
            st.Orientation = Orientation.Horizontal;
            st.Background = new SolidColorBrush(Colors.White);
            Paragraph pgf = new Paragraph();

            Run r = new Run();
            r.Text = App.Convert("Blah ");
            r.FontWeight = FontWeights.Bold;
            r.Foreground = new SolidColorBrush(CommonLib.rgbFromHexString("#FF2D2D2D"));
            pgf.Inlines.Add(r);

            int Rating = (int)(this.userrating * 2);

            string ratingReplacement;

(some more code in the property itself...)

    Run run = new Run();
            run.Text = " " + this.myText;
            run.Foreground = new SolidColorBrush(CommonLib.rgbFromHexString("#FF2D2D2D"));
            pgf.Inlines.Add(run);

            RichTextBox rtb = new RichTextBox();
            rtb.TextWrapping = TextWrapping.Wrap;
            rtb.Width = 450;
            rtb.Blocks.Add(pgf);

            st.Children.Add(rtb);
            st.Background = new SolidColorBrush(Colors.White);
            return st;
        }
    }

The problem is when the text is too much(say more that a 1000 character), or the height of the stackpanel is a lot, Its background becomes black. Its as if the stackpanel breaks) I noticed this earlier but at that time it was in a listbox and had multiple items to i simply made the width of each item 480, used blank grids instead of margins and it was "covered". But this time its just one big chunk of text(in a Paragraph). Let me know if you need ay other info. Please help!!

Upvotes: 0

Views: 107

Answers (1)

Samo
Samo

Reputation: 2181

I worked around a similar "black stackpanel" problem by splitting the text into paragraphs to form a List<String>. And then that list of strings would be the ItemsSource of a ListBox.

So instead of a very large StackPanel, I ended up with a long ListBox.

I also prevented user interaction in the ListBox and vertical scroll by using IsHitTestVisible="False" and ScrollViewer.VerticalScrollBarVisibility="Disabled"

So, the ListBoxended up as follows:

<ListBox x:Name="listBox" IsHitTestVisible="False" ScrollViewer.VerticalScrollBarVisibility="Disabled">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Border Background="White">
                <TextBlock TextWrapping="Wrap" Text="{Binding}"/>
            </Border>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

And in code behind:

textSplitInParagraphs = new List<String>();
// add paragraphs to the list...

listBox.ItemsSource = textSplitInParagraphs;

Don't know if it is the correct workaround, but I helped me, after some time of banging my head against the table.

Hope this helps.

Upvotes: 1

Related Questions