2015-12-22 80 views
0

我想使窗口產生的效果可改變其均勻地有許多元素,白色整個窗口,該窗口後面的圖片:WPF - 如何使窗口不透明度爲白色

the behind window change to white

我使用如下代碼

public MainWindow() 
    { 
     this.Opacity = 0.5; 
    } 

但將其更改爲黑色

enter image description here

即使在窗口中有很多元素並且不將窗口樣式設置爲無時,如何使其整體均勻變爲白色(因爲設置窗口AllowTransparent似乎必須將樣式設置爲無同時)

我希望可以使用代碼來做到這一點,因爲我想動態地做到這一點。

(也可能是它使用用戶控件而不是窗口達到這種效果呢?也許是用戶控件與窗口使用和設置的用戶控件爲透明能做到這一點

----我嘗試之後,我發現沒有按用戶控件沒有屬性AllowTransparent,所以它似乎是不可能的使用這種方式)

回答

1

基本上,你有兩個選擇:

使用白色Background色窗口和窗口兒童更改Opacity,所以白開始彪炳

<Window Background="White"> 
    <Grid Opacity="{Binding WhiteOutVisibility}" Background="WhiteSmoke"> 
     <YourContent/> 
    </Grid> 
</Window> 

使用阿爾法白色覆蓋控制或不透明度,讓實際的內容閃耀

<Grid> 
    <YourContent/> 
    <Border Background="#80ffffff" Visibility="{Binding WhiteOutVisibility}"/> 
</Grid> 

在我看來,你應該使用白色覆蓋如果如果您想繼續用戶交互,您希望阻止用戶與窗口內容和白色背景的交互。

+0

電網背景白色和不透明的作品,謝謝! –

1

如果您只需要淡入淡出客戶區,您可以放置​​覆蓋 - 對窗口上的所有內容進行一些空的半透明控制。

0

窗口類型有屬性AllowsTransparency。您可以在MSVisualStudio的窗口屬性中找到它的屬性。這可以解決你的問題。

1

您可以通過在窗口上放置畫布並將背景設置爲白色和不透明度值來實現此效果。一些像這樣的xaml可以工作。只需更改窗口的用戶控件。

<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看起來是這樣的:

enter image description here

+0

帆布背景白色和不透明的作品,謝謝! –

0

感謝菲利普Ngan和grek40 s'的答案,

兩個電網帆布背景白色,不透明度作品, 我寫了一些測試代碼,可以顯示效果

的XAML部分

<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)) ; 
        // })); 

       } 
      }); 

     } 

    } 

結果:

enter image description here

進一步代碼,

如果想使畫布面膜整個窗口,您可以在畫布改爲

<Canvas Name="WhiteMaskCanvas" Grid.Row="0" Grid.RowSpan="3" Background="White" Opacity="0.5"></Canvas> 

並將代碼添加到類:

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