WPF DataGridColumnWidth не работает, когда PrintVisual

У меня есть файл ucReceipt.xml, который хорошо выглядит в режиме разработки или даже при открытии окна http://prntscr.com/5xl11h:

        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Receipt.ReceiptItems}" 
                  IsReadOnly="True" CanUserSortColumns="False" CanUserResizeColumns="False"
                  RowHeaderWidth="0" Grid.Row="4">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding ItemNo}" Header="No" Width="0.5*" />
                <DataGridTextColumn Binding="{Binding cloth.Name}" Header="Description" Width="*" />
                <DataGridTextColumn Binding="{Binding Quantity}" Header="Qty" Width="auto">
                    <DataGridTextColumn.CellStyle>
                        <Style>
                            <Setter Property="TextBlock.HorizontalAlignment" Value="Stretch" />
                            <Setter Property="TextBlock.TextAlignment" Value="Right" />
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>
                <DataGridTextColumn Binding="{Binding UnitPrice}" Header="Price" Width="auto">
                    <DataGridTextColumn.CellStyle>
                        <Style>
                            <Setter Property="TextBlock.HorizontalAlignment" Value="Stretch" />
                            <Setter Property="TextBlock.TextAlignment" Value="Right" />
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>
                <DataGridTextColumn Binding="{Binding SubTotal}" Header="Amount" Width="auto">
                    <DataGridTextColumn.CellStyle>
                        <Style>
                            <Setter Property="TextBlock.HorizontalAlignment" Value="Stretch" />
                            <Setter Property="TextBlock.TextAlignment" Value="Right" />
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>

Однако, когда я пытаюсь использовать PrintVisual со следующими кодами, DataGridColumns не изменяет размер должным образом http://prntscr.com/5xl1ds

                if (SelectReceiptWindow.SelectedReceipt != null)
                {
                    Receipt = SelectReceiptWindow.SelectedReceipt;
                    if (ReceiptWindow == null)
                        ReceiptWindow = new ReceiptViewModel();
                    ReceiptWindow.Receipt = Receipt;
                    ReceiptWindow.IsOpen = true;

                    // FIXME!!! remove after implementing CloseCmd
                    if (ReceiptWindow.IsOpen)
                        ReceiptWindow.IsOpen = false;

                    switch(ReceiptWindow.ReceiptActions)
                    {
                        case 1: // print Receipt
                            System.Windows.Controls.PrintDialog dlg = new System.Windows.Controls.PrintDialog();
                            ucReceipt r = new ucReceipt();
                            r.Width = 300;
                            r.Height = 600;
                            r.DataContext = ReceiptWindow;
                            dlg.ShowDialog();
                            dlg.PrintVisual((System.Windows.Media.Visual)r, "Receipt");
                            break;

                    }
                }

Есть идеи?


person alkk    schedule 27.01.2015    source источник
comment
Я не знаю первопричины. так как ширина чека фиксированная (300). если вы явно задаете ширину каждого столбца, он должен печатать нормально, не знаю, есть ли такая возможность.   -  person kennyzx    schedule 27.01.2015
comment
Да, если они имеют явную ширину, все работает нормально. Но я пытаюсь понять, есть ли способ автоматически изменить ширину, а затем высоту...   -  person alkk    schedule 27.01.2015