none
Wrapping ListBox Content in WPF Flow Document RRS feed

  • Question

  •  

    I have flow document with a table and in one of TableCell contains BlockUIContainer which in turns has ListBox Control with binding syntax. When I convert the flow document to XPS, the content of ListBoxItems are not wrapping the text in that table cell. Any ideas how to deal with this Issue?

     

    Thanks,

    Prasad

    Wednesday, February 13, 2008 9:06 PM

Answers

  • Did you disable the horizontal scrollbar of the ListBox? Here is an example which works well.

     

    Code Snippet

    namespace ForumProjects

    {

        public partial class MainWindow : Window

        {

            public MainWindow()

            {

                InitializeComponent();

            }

            private void SaveAsXps(object sender, RoutedEventArgs e)

            {

                using (Package container = Package.Open("Test.xps", FileMode.Create))

                {

                    using (XpsDocument xpsDoc = new XpsDocument(container, CompressionOption.Maximum))

                    {

                        XpsSerializationManager rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);

                        DocumentPaginator paginator = ((IDocumentPaginatorSource)this.TestDocument).DocumentPaginator;

                        rsm.SaveAsXaml(paginator);

                    }

                }

            }

        }

    }

    <Window

       x:Class="ForumProjects.MainWindow"

       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

       xmlns:sys="clr-namespace:System;assembly=mscorlib"

       Title="MainWindow" Height="600" Width="800">

        <StackPanel>

            <FlowDocumentReader BorderBrush="Blue" BorderThickness="1" Width="700" Height="500">

                <FlowDocument x:Name="TestDocument" ColumnWidth="300" FontSize="14" FontFamily="Georgia">

                    <Table>

                        <Table.Columns>

                            <TableColumn/>

                            <TableColumn/>

                        </Table.Columns>

     

                        <TableRowGroup>

                            <TableRow>

                                <TableCell>

                                    <BlockUIContainer>

                                        <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto">

                                            <ListBox.ItemsSource>

                                                <x:Array Type="{x:Type sys:String}">

                                                    <sys:String>This example shows how to bind to an enumeration by binding to the enumeration's GetValues method.</sys:String>

                                                    <sys:String>In the following example, the ListBox displays the list of HorizontalAlignment enumeration values through data binding.</sys:String>

                                                    <sys:String>The ListBox and the Button are bound such that you can change the HorizontalAlignment property value of the Button by selecting a value in the ListBox.</sys:String>

                                                </x:Array>

                                            </ListBox.ItemsSource>

                                            <ListBox.ItemTemplate>

                                                <DataTemplate>

                                                    <TextBlock Text="{Binding}" TextWrapping="Wrap" Margin="10"/>

                                                </DataTemplate>

                                            </ListBox.ItemTemplate>

                                        </ListBox>

                                    </BlockUIContainer>

                                </TableCell>

                                <TableCell>

                                    <Paragraph>

                                        This example shows how to bind to an enumeration by binding to the enumeration's GetValues method.

                                        In the following example, the ListBox displays the list of HorizontalAlignment enumeration values through data binding.

                                        The ListBox and the Button are bound such that you can change the HorizontalAlignment property value of the Button by selecting a value in the ListBox.

                                    </Paragraph>

                                </TableCell>

                            </TableRow>

                        </TableRowGroup>

                    </Table>

                </FlowDocument>

            </FlowDocumentReader>

     

            <Button Click="SaveAsXps">SaveAsXps</Button>

        </StackPanel>

    </Window>

     

     

    Best Regards,

    Wei Zhou

    Friday, February 15, 2008 3:19 AM
    Moderator

All replies

  • Did you disable the horizontal scrollbar of the ListBox? Here is an example which works well.

     

    Code Snippet

    namespace ForumProjects

    {

        public partial class MainWindow : Window

        {

            public MainWindow()

            {

                InitializeComponent();

            }

            private void SaveAsXps(object sender, RoutedEventArgs e)

            {

                using (Package container = Package.Open("Test.xps", FileMode.Create))

                {

                    using (XpsDocument xpsDoc = new XpsDocument(container, CompressionOption.Maximum))

                    {

                        XpsSerializationManager rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);

                        DocumentPaginator paginator = ((IDocumentPaginatorSource)this.TestDocument).DocumentPaginator;

                        rsm.SaveAsXaml(paginator);

                    }

                }

            }

        }

    }

    <Window

       x:Class="ForumProjects.MainWindow"

       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

       xmlns:sys="clr-namespace:System;assembly=mscorlib"

       Title="MainWindow" Height="600" Width="800">

        <StackPanel>

            <FlowDocumentReader BorderBrush="Blue" BorderThickness="1" Width="700" Height="500">

                <FlowDocument x:Name="TestDocument" ColumnWidth="300" FontSize="14" FontFamily="Georgia">

                    <Table>

                        <Table.Columns>

                            <TableColumn/>

                            <TableColumn/>

                        </Table.Columns>

     

                        <TableRowGroup>

                            <TableRow>

                                <TableCell>

                                    <BlockUIContainer>

                                        <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto">

                                            <ListBox.ItemsSource>

                                                <x:Array Type="{x:Type sys:String}">

                                                    <sys:String>This example shows how to bind to an enumeration by binding to the enumeration's GetValues method.</sys:String>

                                                    <sys:String>In the following example, the ListBox displays the list of HorizontalAlignment enumeration values through data binding.</sys:String>

                                                    <sys:String>The ListBox and the Button are bound such that you can change the HorizontalAlignment property value of the Button by selecting a value in the ListBox.</sys:String>

                                                </x:Array>

                                            </ListBox.ItemsSource>

                                            <ListBox.ItemTemplate>

                                                <DataTemplate>

                                                    <TextBlock Text="{Binding}" TextWrapping="Wrap" Margin="10"/>

                                                </DataTemplate>

                                            </ListBox.ItemTemplate>

                                        </ListBox>

                                    </BlockUIContainer>

                                </TableCell>

                                <TableCell>

                                    <Paragraph>

                                        This example shows how to bind to an enumeration by binding to the enumeration's GetValues method.

                                        In the following example, the ListBox displays the list of HorizontalAlignment enumeration values through data binding.

                                        The ListBox and the Button are bound such that you can change the HorizontalAlignment property value of the Button by selecting a value in the ListBox.

                                    </Paragraph>

                                </TableCell>

                            </TableRow>

                        </TableRowGroup>

                    </Table>

                </FlowDocument>

            </FlowDocumentReader>

     

            <Button Click="SaveAsXps">SaveAsXps</Button>

        </StackPanel>

    </Window>

     

     

    Best Regards,

    Wei Zhou

    Friday, February 15, 2008 3:19 AM
    Moderator
  • Yes. You are right, I had defined a style which was hidding the HorizontalScrollBar instead of Disabling it.

     

    Thanks,

    Prasad

     

    Friday, February 15, 2008 1:52 PM