WPF无边框窗口,带有影子VS2012风格

时间:2013-02-06 13:29:42

标签: c# wpf user-interface visual-studio-2012

我正在尝试创建一个看起来像Visual Studio 2012的应用程序。我使用WindowChrome删除了窗口边框,并更改了我的xaml中的边框颜色。

我不知道怎么做是画出窗户的阴影,在这里你可以看到我所说的截图:

Visual Studio Borderless window with shadow

如你所见,有一个阴影,它的颜色也是边框颜色

您知道如何使用WPF实现它吗?

4 个答案:

答案 0 :(得分:3)

这称为“Metro风格”(Windows 8风格)。我认为this Code Project文章对你很有意思,它会对你有帮助。

您可以尝试使用MIT许可证授权的Elysium,其中包括ApplicationBar和ToastNotification类,或者来自codeplext的MetroToolKit

This是关于极乐世界的精彩教程,我认为它可以帮助你。

对于影子,只需在{XAML中的BitmapEffect中向Border添加Grid

<Grid>
    <Border BorderBrush="#FF006900" BorderThickness="3" Height="157" HorizontalAlignment="Left" Margin="12,12,0,0" Name="border1" VerticalAlignment="Top" Width="479" Background="#FFCEFFE1" CornerRadius="20, 20, 20, 20">
        <Border.BitmapEffect>
          <DropShadowBitmapEffect Color="Black" Direction="320" ShadowDepth="10" Opacity="0.5" Softness="5" />
        </Border.BitmapEffect>
        <TextBlock Height="179" Name="textBlock1" Text="Hello, this is a beautiful DropShadow WPF Window Example." FontSize="40" TextWrapping="Wrap" TextAlignment="Center" Foreground="#FF245829" />
    </Border>
</Grid>

enter image description here

答案 1 :(得分:3)

您可以使用这个简单的xaml代码

<Window x:Class="VS2012.MainWindow" 
         xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation 
         xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml 
         Title="MainWindow" 
         Height="100" Width="200" 
         AllowsTransparency="True" WindowStyle="None" Background="Transparent"> 
<Border BorderBrush="DarkOrange" BorderThickness="1" Background="White" Margin="5">
         <Border.Effect>
                <DropShadowEffect ShadowDepth="0" BlurRadius="5" Color="DarkOrange"/>
         </Border.Effect>
</Border>
</Window> 

答案 2 :(得分:1)

我正在尝试获得相同的效果,我的应用程序正在使用.NET 4,因此我无法直接使用WindowChrome(所以,我使用Microsoft Windows Shell库来获得相同的效果)

在这个thread中,正确地注意到使用spy ++可以看出Visual Studio有四个名为 VisualStudioGlowWindow 的窗口来实现发光效果。 在许多地方已经描述了AllowsTransparency属性为true会如何降低性能。

所以,我试图采用VS方式,结果并不差(至少对我而言);不需要在主窗口上使用模糊或类似效果,我只需要对某些窗口状态(焦点/可见/隐藏)进行一些打击。

我已将所有必需的内容放在github上 - 希望这可以提供帮助。

答案 3 :(得分:1)

<Window x:Class="MyProject.MiniWindow"
    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"
    xmlns:local="clr-namespace:MyProject"
    mc:Ignorable="d" 
    WindowStyle="None" 
    Title="MiniWindow" Background="Transparent"
    Height="200" Width="200" 
    >

<WindowChrome.WindowChrome>
    <WindowChrome 
    CaptionHeight="0"
    ResizeBorderThickness="4" />
</WindowChrome.WindowChrome>

<Grid Margin="0">
    <Border BorderThickness="3">
        <Border BorderThickness="1" Margin="0" BorderBrush="#ff007acc">
            <Border.Effect>
                <DropShadowEffect Color="#ff007acc" Direction="132" ShadowDepth="0" BlurRadius="8" />
            </Border.Effect>
            <Grid   Background="#ff2d2d30">
                
            </Grid>
        </Border>
    </Border>
    
    
</Grid>