我有一個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 ation新目錄等。也許.NET看到了這一點,並且它是異步運行的。
只要您不要異步調用'ChangeWindowControlStyles',它將在下一行運行時完成。您不必「等待」返回的方法,只要該行完成並轉到下一個方法就立即完成。取決於如何調用SomeMethod,你可能需要調用Dispatcher。 –
您是否試圖在沒有所有程序窗口或屏幕截圖的情況下拍攝屏幕截圖,而不僅僅是觸發它的窗口,但您還有其他窗口? –
我想隱藏窗口中的一個畫布,也要將window.Background Opacity更改爲0.所以,我想隱藏特定的控件而不是所有的窗口。我將編輯我的文章,添加一些額外的信息。 @ SaintJob2.0 – Edgar