Я хочу сделать снимок моего UserControl, который еще не был показан. Вот мой код:Создайте снимок неотображенного UserControl
public Screenshot(MyViewModel viewModel)
{
if (viewModel == null)
return;
// Create a TabControl, where View is hosted in
var visualTab = new TabControl();
visualTab.Width = FrameworkAdjustments.VisualSize.Width;
visualTab.Height = FrameworkAdjustments.VisualSize.Height;
visualTab.TabStripPlacement = Dock.Left;
// Tabs should only be shown, if there are more than one 'SubView'
Visibility tabVisibility = Visibility.Collapsed;
if (viewModel.SubViews.Count > 1)
tabVisibility = Visibility.Visible;
foreach (var subView in viewModel.SubViews)
{
var tab = new TabItem();
tab.Header = subView.TranslatedId; // multilanguage header
tab.Visibility = tabVisibility;
if (subView.Id == viewModel.ActiveSubView.Id)
{
tab.IsSelected = true;
// Without the following line my UI works, but my TabControl is empty.
tab.Content = ViewManager.GetViewById(subView.Id);
// ViewManager.GetViewById(subView.Id); returns a UserControl
}
tab.Measure(FrameworkAdjustments.VisualSize);
tab.Arrange(new Rect(FrameworkAdjustments.VisualSize));
visualTab.Items.Add(tab);
}
_ContentCtrl = new ContentControl() { Width = FrameworkAdjustments.VisualSize.Width, Height = FrameworkAdjustments.VisualSize.Height };
_ContentCtrl.Content = visualTab;
_ContentCtrl.Measure(FrameworkAdjustments.VisualSize);
_ContentCtrl.Arrange(new Rect(FrameworkAdjustments.VisualSize));
RenderTargetBitmap bmp = new RenderTargetBitmap((int)FrameworkAdjustments.VisualSize.Width, (int)FrameworkAdjustments.VisualSize.Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(_ContentCtrl);
this.ItemBrush = new ImageBrush(bmp);
}
Этот код работает для каждого «MyViewModel», когда я начинаю App. «MyViewModel» содержит список «SubViews», которые являются содержимым вкладок, и они содержат «FunctionKeyBar», кнопки которых можно активировать с помощью «F1» - «F12». Но после создания снимка экрана я больше не могу использовать F1-F12. Также есть другие проблемы, такие как язык переключения. Есть ли другой способ создания моментального снимка элемента управления, который не появился в поле зрения?
Спасибо за все ответы.
Привет Бенни
Hello AnjumSKhan, спасибо за быстрый ответ. Моя проблема в том, что я хочу показать пользователю предварительный просмотр, поэтому я не могу поместить _ContentControl в визуальное дерево, прежде чем делать снимок. – Benny
@Benny plz см. Обновленный ответ, работает как шарм. – AnjumSKhan
Я пробовал это сейчас, но это не решение для моей проблемы. Я должен использовать .NET 4.0, который имеет некоторые различия в шаблоне async-wait. Другое дело, у меня есть до 5 экземпляров (что зависит от конфигурации) «MyViewModel», из которых я хочу сделать снимок экрана (или миниатюру) после загрузки моего приложения. Я пробовал ваше решение в тестовом проекте, и это довольно хорошо, но в моем случае это вызывает много рендеринга, что замедляет мою работу. – Benny