Я предвосхищу это, заявив, что я новичок в программировании WPF и могу сделать несколько ошибок. Будем очень благодарны за любую информацию, которая поможет мне улучшить свои навыки.
Я работаю с приложением WPF и перебираю список объектов, которые содержат свойства, описывающие документ, который должен быть создан на лету и автоматически распечатан. Я пытаюсь отобразить небольшую сетку в интерфейсе, который показывает документ, который создается до его печати. Это служит двум целям: во-первых, оно позволяет пользователю видеть работу, выполняемую приложением. Во-вторых, он отображает элементы на экране, чтобы у меня была возможность что-то напечатать, так как WPF, похоже, не может загрузить изображение для динамической печати, не отображая его на экране. В моем коде я устанавливаю различные элементы в сетке и устанавливаю видимость видимой. Однако пользовательский интерфейс не обновляется, и напечатанный документ выглядит не так, как задумано, поскольку изображение никогда не появляется на экране.
Вот XAML, который я настроил
<Grid x:Name="LayoutRoot" Background="Black">
<Grid Name="previewGrid" Grid.Row="1" Grid.Column="1" Background="White" Visibility="Hidden">
<Canvas Name="pageCanvas" HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid Name="pageGrid" Width="163" Height="211">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="81.5"></ColumnDefinition>
<ColumnDefinition Width="81.5"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Name="copyright" TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Bottom"></TextBlock>
<Image Name="pageImage" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center"></Image>
</Grid>
</Canvas>
.....canvas for pages 2-4 not shown but structure is the same as for pageGrid.....
</Grid>
</Grid>
</Window>
Вот код, который должен установить элементы.
Dim bmp as new Bitmapimage
previewGrid.Visibility = Windows.Visibility.Visible
pageURI = New Uri(pageCollection(i).iamgeURL, UriKind.Absolute)
pageGrid.Visibility = Windows.Visibility.Visible
bmp.BeginInit()
bmp.UriSource = cardURI
bmp.EndInit()
pageImage.Source = bmp
copyright.Text = copyrightText
cardPreviewGrid.UpdateLayout()
' More code that prints the visual element pageCanvas
previewGrid.Visibility = Windows.Visibility.Hidden
Код в codebehind циклически повторяется несколько раз в зависимости от того, сколько разных документов печатает пользователь. По сути, он создает визуальный элемент для страницы, печатает его версию XPS, а затем создает следующую страницу, печатает ее и т. Д. После обработки всех страниц задание фактически отправляется на принтер. Единственная цель этого приложения - дать пользователю возможность распечатать эти документы, чтобы не было другой задачи, которую они могут выполнить в приложении во время печати документов. Я думал, что помещение этой задачи в фоновый поток поможет обновить пользовательский интерфейс, но, поскольку я пытаюсь манипулировать элементами непосредственно в потоке пользовательского интерфейса, может показаться, что эта опция не будет работать для меня. Что я здесь не так делаю и как я могу улучшить код, чтобы получить поведение, которого я пытаюсь достичь?