У меня есть window.xaml, который имеет компоненты с различным стилем (красный цвет границы, прозрачность и т. Д.). В один момент я хочу создать скриншот и сохранить в папку. Но перед этим фон окна должен быть прозрачным, а someCanvas
должен быть скрыт.Как узнать, когда оконное управление завершено завершено
Как узнать, когда метод стилизации закончен, чтобы я мог сделать снимок экрана?
public void SomeMethod()
{
ChangeWindowControlStyles();
//TODO: waint till 'ChangeWindowControlStyles' finished
TageScreenshotAndSave();
}
public void ChangeWindowControlStyles()
{
this.Background.Opacity = 0;
this.someCanvas.Visibility = Visibility.Collapsed;
//Some other stuff related to window content styling
}
public void TakeScreenshotAndSave()
{
//No multithreading happening here
//Just taking screenshot and saving to folder
}
EDIT
Само окно является прозрачным WindowStyle="None"
, что означает, что она не имеет границ. В начале окна Background.Opacity
установлено значение 0,1, и все элементы управления видны (есть другие элементы управления, кроме someCanvas
, которые должны быть всегда видны).
Перед скриншоте берется someCanvas
скрыт и Background.Opacity
устанавливается в 0.
Window.xaml
<Window
WindowStartupLocation="CenterScreen"
ResizeMode="NoResize"
WindowState="Maximized"
WindowStyle="None"
AllowsTransparency="True" >
<Window.Background>
<SolidColorBrush Opacity="0.1" Color="White"/>
</Window.Background>
<Grid Name="mainGrid" Background="Transparent" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0">
<!--Main canvas, function holder-->
<Canvas Name="canvasAlwaysVisible" Margin="0" Panel.ZIndex="5">
<!-- Controls that are always visible -->
</Canvas>
<Canvas x:Name="someCanvas" Margin="0" Background="Transparent" Visibility="Visibility">
<!-- Controls with styling -->
</Canvas>
</Grid>
</Window>
EDIT 2
Другое дело, упомянуть о том, что внутри TakeScreenshotAndSave
есть также System.IO
операции типа - получить все папки в каталоге, cre новый каталог и т. д. Возможно, .NET видит это и запускается асинхронно.
До тех пор, пока вы не вызовите 'ChangeWindowControlStyles' асинхронно, оно будет завершено, когда будет запущена следующая строка. Вам не нужно «ждать» для возвращаемого метода, его закончить, как только строка будет выполнена, и перейдет к следующему. В зависимости от того, как вызывается 'SomeMethod', вам может потребоваться вызвать на' Dispatcher'. –
Вы пытаетесь сделать скриншот экрана без всех окон вашей программы или скриншота без окна, которое запускает его, но у вас все еще есть другие окна? –
Я хотел бы скрыть один из холстов в этом окне, а также изменить window.Background Opacity на 0. Итак, я хочу скрыть определенные элементы управления, а не только не все окна. Я отредактирую свой пост, добавлю дополнительную информацию. @ SaintJob2.0 – Edgar