2014-07-23 142 views
2

我有一个窗口与图像作为背景。在那个窗口上我也有按钮和其他控件。窗口背景图像模糊效果

这是我为窗口样式:

<Style x:Key="MyWindow" TargetType="{x:Type Window}"> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <ImageBrush ImageSource="Images\myImage.png" /> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Effect"> 
      <Setter.Value> 
       <BlurEffect Radius="20" /> 
      </Setter.Value> 
     </Setter> 
    </Style> 

的问题是,模糊效果应用到整个窗口,而不只是背景图像。所以,我的按钮也很模糊,这不是我想要的。我只想让图像背景变得模糊,而不是按钮。我怎样才能做到这一点?

回答

4

而不是使用图像刷你的窗口的背景,添加Image控制作为第一个(最低)元素到你的窗口的顶级容器,并设置影响有:

<Window ...> 
    <Grid> 
     <Image Source="Images\myImage.png" Stretch="Fill"> 
      <Image.Effect> 
       <BlurEffect Radius="20"/> 
      </Image.Effect> 
     </Image> 

     <!-- other UI elements --> 

    </Grid> 
</Window> 

如果你真的需要一个背景画笔,您可以使用一个VisualBrush而不是图像刷的是这样的:

<Style TargetType="Window"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <VisualBrush> 
       <VisualBrush.Visual> 
        <Image Source="Images\myImage.png"> 
         <Image.Effect> 
          <BlurEffect Radius="20"/> 
         </Image.Effect> 
        </Image> 
       </VisualBrush.Visual> 
      </VisualBrush> 
     </Setter.Value> 
    </Setter> 
    ... 
</Style> 

以便对农作物模糊的背景刷的边框,可以调整Viewbox(其由德发ult以相对单位给出)如下:

<VisualBrush Viewbox="0.05,0.05,0.9,0.9"> 

当然,精确值取决于图像的绝对大小。您也可以通过设置ViewboxUnits="Absolute" specifiy视框在绝对单位:

<VisualBrush Viewbox="0,0,1024,1280" ViewboxUnits="Absolute"> 
+0

这工作,但它增加了周围的模糊图像约5 milimeters黑色边框,并且使图像5mm以下,这样有余地边境。我怎样才能删除边框? –

+0

我不知道边界来自哪里。这当然是你的应用程序中的某个地方。你尝试过哪种方法? – Clemens

+0

第二个,用VisualBrush。 –