我想让窗口有效果可以将整个窗口有很多元素均匀地变成白色,如图中的窗口所示:
我使用像
这样的代码 public MainWindow()
{
this.Opacity = 0.5;
}
但它变为黑色
如果在窗口中有很多元素并且没有将窗口样式设置为无,那么如何使整个均匀变为白色(因为设置Window AllowTransparent似乎必须将Style设置为none同时)
我希望可以使用代码来完成它,因为我想动态地执行它。
(或者可能它使用UserControl而不是Window来实现这种效果?也许UserControl与Window一起使用并将UserControl设置为Transparent可以做到
----在我尝试之后,我发现UserControl没有属性AllowTransparent,所以看起来似乎不可能使用这种方式)
答案 0 :(得分:1)
如果你只需淡化客户区,你可以放置叠加 - 对窗口上的所有内容进行一些空的半透明控制。
答案 1 :(得分:1)
基本上,您有两种选择:
在Window上使用白色Background
颜色并更改窗口中的Opacity
子项,以便白色开始闪耀
<Window Background="White">
<Grid Opacity="{Binding WhiteOutVisibility}" Background="WhiteSmoke">
<YourContent/>
</Grid>
</Window>
使用带有Alpha或Opacity的白色叠加控件,让实际内容透过
<Grid>
<YourContent/>
<Border Background="#80ffffff" Visibility="{Binding WhiteOutVisibility}"/>
</Grid>
在我看来,如果你想要阻止用户与窗口内容和白色背景的互动,你应该使用白色叠加,如果你想继续用户交互。
答案 2 :(得分:1)
您可以通过在窗口上放置画布,并将背景设置为白色和不透明度值来实现此效果。像这样的一些xaml会起作用。只需更改UserControl for Window。
<UserControl x:Class="View.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="40" d:DesignWidth="100">
<Grid>
<TextBox Text="Hello there" />
<!-- this will show faintly -->
<Canvas Background="White" Opacity="0.8"></Canvas>
</Grid>
</UserControl>
这个xaml看起来像这样:
答案 3 :(得分:0)
窗口类型具有属性AllowsTransparency
。您可以在MSVisualStudio的窗口属性中找到它。这可以解决您的问题。
答案 4 :(得分:0)
感谢Phillip Ngan和grek40 s&#39;回答,
网格和画布,背景白色和不透明效果正常, 我写了一些可以显示效果的测试代码
Xaml Part
<Window x:Class="WPFAbitraryTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Button Grid.Row="0" Background="Blue" Foreground="White" FontSize="20" Click="SwitchOpacity_OnClick">Clcik to SwitchOpacity</Button>
<Button Grid.Row="1" Background="ForestGreen">hi2</Button>
<ListBox Grid.Row="2" Background="Orange">
<ListBoxItem>ListBox Item #1</ListBoxItem>
<ListBoxItem>ListBox Item #2</ListBoxItem>
<ListBoxItem>ListBox Item #3</ListBoxItem>
</ListBox>
<!-- <Grid Grid.Row="1" Grid.RowSpan="2" Opacity="0.9" Background="WhiteSmoke"/> -->
<Canvas Name="WhiteMaskCanvas" Grid.Row="1" Grid.RowSpan="2" Background="White" Opacity="0.5"></Canvas>
</Grid>
</Window>
班级
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void SwitchOpacity_OnClick(object sender, RoutedEventArgs e)
{
int opacityVal = 0;
Task.Factory.StartNew(() =>
{
for (int i = 0; i <= 1000; i++)
{
int j = 0;
Thread.Sleep(100);
//Use ++ % to change Opacity
this.Dispatcher.Invoke(
DispatcherPriority.SystemIdle,
new Action(() =>
{
WhiteMaskCanvas.Opacity = ++opacityVal % 10 / 10.0;
}));
////Use Abs Cosine to Change Opacity
//this.Dispatcher.Invoke(
// DispatcherPriority.SystemIdle,
// new Action(() =>
// {
// WhiteMaskCanvas.Opacity =
// Math.Abs(Math.Sin(++opacityVal*0.1)) ;
// }));
}
});
}
}
结果:
进一步的代码,
如果想要将画布蒙版整个窗口,可以将画布更改为
<Canvas Name="WhiteMaskCanvas" Grid.Row="0" Grid.RowSpan="3" Background="White" Opacity="0.5"></Canvas>
并将代码添加到class:
public MainWindow()
{
InitializeComponent();
WhiteMaskCanvas.Visibility = Visibility.Collapsed;
}
private void SwitchOpacity_OnClick(object sender, RoutedEventArgs e)
{
WhiteMaskCanvas.Visibility = Visibility.Visible;
int opacityVal = 0;
Task.Factory.StartNew(() =>
{
//below same as code above