同様の質問が出され、回答されていることを私は知っています。しかし、私のものは3つの部分からなる質問です。
この質問の目的のために、次のことに留意してください。
何よりもまず、フチなしウィンドウの背景にガラス効果を使用することは可能ですか?もしそうなら(そして私はそれがそうだと信じています)、これはどのように行われますか?
さらに、Windows 8以降では半透明のガラス効果が使用されなくなったため、これらのオペレーティングシステムでこれを実行できますか?
滑らかなネイティブDWMブラー効果が必要ですが、光沢のあるガラスオーバーレイは必要ありません。また、ユーザーのテーマ設定でウィンドウの色を事前定義したくありません。
この効果をウィンドウの特定の部分にのみ適用することは可能ですか?さらに重要なのは、ぼかし効果の強度(半径)を調整することは可能ですか?
ご要望に応じて、実現したい効果の例をいくつか掲載しました。
上の画像は、私のWPFアプリケーションの実際のスクリーンショットです(まだ作業中です)。そのミニマリストデザインは、動きのアニメーションとウィンドウのサイズ変更に大きく依存しています。
いくつかのフォトショップのスキルを使用して、上の画像をレンダリングし、作成したい効果を示しました正確に私が望む方法。次の点に注意してください。
達成しようとしているのはガラス効果ではなく、透明+ぼかしであるため、次の方法を使用してウィンドウの背後をぼかします。
Windows 7: DwmEnableBlurBehindWindow を使用して、ウィンドウの背後をぼかすことができます。
ウィンドウ8:Windows 8でDwmEnableBlurBehindWindowが削除されたため、実行可能な解決策が見つかりませんでした。
Windows 10: SetWindowCompositionAttribute を使用して、ウィンドウの背後をぼかすことができます。
上記の解決策は、ウィンドウの後ろにのみぼかし効果を適用します。透明度と色を定義するのはウィンドウ次第です。
これらのアプローチでは、ウィンドウ全体の下でのみぼかすことができ、透明にしたいウィンドウの部分でアルファチャネルを使用するのはあなた次第です。ぼかし半径も定義できないと思います。
Stackoverflowの経験が浅いことはご容赦ください。でも、少しでもお手伝いしたいと思いました。
Tomが投稿したリンクをたどることで、このコードブロック(元々はc#)に出くわすことができました。このコードがほとんどの人にすぐに利用できないように見えるので、ここにあります:
Imports System.Runtime.InteropServices
Imports System.Windows.Interop
'Import namespace ("name of project" . "name of namespace")
Imports Blurred_Opacity.BlurBehind
Namespace BlurTest
Enum AccentState
ACCENT_DISABLED = 0
ACCENT_ENABLE_GRADIENT = 1
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2
ACCENT_ENABLE_BLURBEHIND = 3
ACCENT_INVALID_STATE = 4
End Enum
Structure AccentPolicy
Public AccentState As AccentState
Public AccentFlags As Integer
Public GradientColor As Integer
Public AnimationId As Integer
End Structure
Structure WindowCompositionAttributeData
Public Attribute As WindowCompositionAttribute
Public Data As IntPtr
Public SizeOfData As Integer
End Structure
Enum WindowCompositionAttribute
WCA_ACCENT_POLICY = 19
End Enum
End Namespace
Class MainWindow
<DllImport("user32.dll")>
Friend Shared Function SetWindowCompositionAttribute(hwnd As IntPtr, ByRef data As WindowCompositionAttributeData) As Integer
End Function
Sub Window_Loaded() handles me.loaded
EnableBlur()
End Sub
Sub Window_MouseDown() handles me.MouseLeftButtonDown
DragMove()
End Sub
Sub EnableBlur()
Dim windowHelper = New WindowInteropHelper(Me)
Dim accent = New AccentPolicy()
accent.AccentState = AccentState.ACCENT_ENABLE_BLURBEHIND
Dim accentStructSize = Marshal.SizeOf(accent)
Dim accentPtr = Marshal.AllocHGlobal(accentStructSize)
Marshal.StructureToPtr(accent, accentPtr, False)
Dim Data = New WindowCompositionAttributeData()
Data.Attribute = WindowCompositionAttribute.WCA_ACCENT_POLICY
Data.SizeOfData = accentStructSize
Data.Data = accentPtr
SetWindowCompositionAttribute(windowHelper.Handle, Data)
Marshal.FreeHGlobal(accentPtr)
End Sub
End Class
実装すると、次のようにウィンドウ全体に影響します。
あなたのデザインをコピーしようとして約5分後、私はこれを思いついた:
あなたは私よりも良いデザインの仕事をすることができると確信しています。 (ウィンドウの)背景色を調整するだけでブレンドカラーを変更でき、不透明度レベルも変更できます。私のデザインのXAMLは次のとおりです。
<Window
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.Microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="MainWindow"
Title="Blurred Opacity" Height="623" Width="752"
Background="#727A7A7A"
AllowsTransparency="True"
WindowStyle="None"
BorderThickness="1"
WindowStartupLocation="CenterScreen"
Loaded="Window_Loaded" MouseLeftButtonDown="Window_MouseDown" Topmost="True" BorderBrush="#FF1E9EC5">
<Grid>
<Rectangle Fill="#FF0143A4" Height="130" VerticalAlignment="Top"/>
<Rectangle Fill="White" Margin="0,130,0,0" HorizontalAlignment="Right" Width="375"/>
<StackPanel HorizontalAlignment="Left" Margin="0,130,0,0" Width="375">
<TextBlock x:Name="textBlock" Height="50" TextWrapping="Wrap" Text="Category 1" d:LayoutOverrides="LeftPosition, RightPosition" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6"/>
<TextBlock x:Name="textBlock_Copy" Height="50" TextWrapping="Wrap" Text="Category 2" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"/>
<TextBlock x:Name="textBlock_Copy1" Height="50" TextWrapping="Wrap" Text="Category 3" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"/>
<TextBlock x:Name="textBlock_Copy2" Height="50" TextWrapping="Wrap" Text="Category 4" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"/>
<TextBlock x:Name="textBlock_Copy3" Height="50" TextWrapping="Wrap" Text="Category 5" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"/>
<TextBlock x:Name="textBlock_Copy4" Height="50" TextWrapping="Wrap" Text="Category 6" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"/>
<TextBlock x:Name="textBlock_Copy5" Height="50" TextWrapping="Wrap" Text="Category 7" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"/>
<TextBlock x:Name="textBlock_Copy6" Height="50" TextWrapping="Wrap" Text="Category 8" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"/>
</StackPanel>
<TextBlock x:Name="textBlock_Copy7" Height="90" TextWrapping="Wrap" Text="Example" FontSize="65" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" Margin="222.5,23,152.5,0" VerticalAlignment="Top" Foreground="White"/>
<Path Data="M705,27.333333 L735.66667,10" Fill="White" HorizontalAlignment="Right" Height="24" Margin="0,7,21,0" Stretch="Fill" VerticalAlignment="Top" Width="24" StrokeThickness="3" Stroke="White"/>
<Path Data="M705,27.333333 L735.66667,10" Fill="White" HorizontalAlignment="Right" Height="24.083" Margin="0,6.833,20.333,0" Stretch="Fill" VerticalAlignment="Top" Width="24.167" StrokeThickness="3" Stroke="White" RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="-1"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Path.RenderTransform>
</Path>
<StackPanel HorizontalAlignment="Right" Margin="0,130,0,0" Width="375">
<TextBlock x:Name="textBlock1" Height="50" TextWrapping="Wrap" Text="Item 1" d:LayoutOverrides="LeftPosition, RightPosition" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6"/>
<TextBlock x:Name="textBlock_Copy8" Height="50" TextWrapping="Wrap" Text="Item 2" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"/>
<TextBlock x:Name="textBlock_Copy9" Height="50" TextWrapping="Wrap" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"><Run Text="Item "/><Run Text="3"/><LineBreak/><Run Text="3"/></TextBlock>
<TextBlock x:Name="textBlock_Copy10" Height="50" TextWrapping="Wrap" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"><Run Text="Item "/><Run Text="4"/></TextBlock>
<TextBlock x:Name="textBlock_Copy11" Height="50" TextWrapping="Wrap" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"><Run Text="Item "/><Run Text="5"/></TextBlock>
<TextBlock x:Name="textBlock_Copy12" Height="50" TextWrapping="Wrap" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"><Run Text="Item "/><Run Text="6"/></TextBlock>
<TextBlock x:Name="textBlock_Copy13" Height="50" TextWrapping="Wrap" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"><Run Text="Item "/><Run Text="7"/></TextBlock>
<TextBlock x:Name="textBlock_Copy14" Height="50" TextWrapping="Wrap" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"><Run Text="Item "/><Run Text="8"/></TextBlock>
<TextBlock x:Name="textBlock_Copy15" Height="50" TextWrapping="Wrap" FontSize="35" Padding="10,0,0,0" TextOptions.TextFormattingMode="Display" LineHeight="6" d:LayoutOverrides="LeftPosition, RightPosition"><Run Text="Item "/><Run Text="9"/></TextBlock>
</StackPanel>
</Grid>
これがお役に立てば幸いです。