我有一种风格,它去除了通常的窗户镀铬并用航空效果玻璃代替它(代码在底部)。
如果您查看指示的线,我正在使用黑盒来使玻璃变暗但保持半透明(我从中获取的示例使用白盒用于类似目的)。我遇到的问题是黑框出现在控制框上方。带有和不带有黑框的窗口的屏幕截图...
(包括记事本供参考)。我想让窗口变暗,但这会使控件无法使用我当前的方法。另外,请注意悬停在我的表格上的红色光芒X
在我的表格之外是明亮的,但在里面是黑暗的。
所以,我的具体问题是......如何让控制框呈现在“背景”层之上?
更一般地说,感觉必须有更好的方法来做到这一点?我倾向于不喜欢过多地模仿,因为边缘情况太多了。
我想要实现的是一个窗口(*如果它现在正在工作):
- 黑暗(不是真的工作)
- 通常的 3 个控制按钮(如果不是上述情况,可能会起作用)
- 可调整大小 *
- 使用标题栏区域可拖动 *
- 半透明 *
- chrome 和我的窗口之间没有“控制”边框 *
我提到那份洗衣单只是为了让你知道我需要用任何解决方案做什么。我正在使用 .Net 4.5,这意味着System.Shell.ChromeWindow
它包含在框架中,但似乎与我能找到的每个教程中提到的旧版本略有不同。
有人可以指出我正确的方向吗?
<Application.Resources>
<BitmapImage x:Key="MainIcon"
UriSource="./Resources/MainIcon.png" />
<Style x:Key="Chromeless"
TargetType="{x:Type Window}">
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome GlassFrameThickness="-1"
ResizeBorderThickness="4"
CaptionHeight="36" />
</Setter.Value>
</Setter>
<!--pack://application:,,,/Resources/Search.png-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<!-- This is the ContentPresenter that displays the window content. -->
<Border Margin="0,40,0,25">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
<!--This is the transparent white rectangle that goes behind the window content.-->
<!-- Window Border Content -->
<!-- HERE ----> <Border Margin="0"
BorderBrush="Gray"
BorderThickness="0,1,0,1"
Grid.ZIndex="-1">
<Rectangle Fill="Black"
Opacity="0.5" />
</Border>
<!-- System Button -->
<Button VerticalAlignment="Top"
HorizontalAlignment="Left"
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
WindowChrome.IsHitTestVisibleInChrome="True"
Command="{x:Static SystemCommands.ShowSystemMenuCommand}"
CommandParameter="{Binding ElementName=LibraryWindow}"
BorderThickness="0">
<Image Source="{StaticResource MainIcon}"
Width="64"
Height="64"
WindowChrome.IsHitTestVisibleInChrome="True"
/>
</Button>
<!-- Window Title -->
<TextBlock VerticalAlignment="Top"
TextAlignment="Left"
FontSize="15"
Padding="40,8,0,0"
Foreground="White"
Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>