Blur контролирует под другим контролем - PullRequest
1 голос
/ 16 ноября 2011

Если у меня есть слои элементов управления, такие как:

Window
 - Grid1 (containing various UI elements)
  - GridBlurOverlay (does nothing except blur Grid1)
 - Grid2 (containing a single UI element (e.g. a "please wait" control)

Как я могу применить синий эффект к grid1 и его содержимому, фактически не устанавливая его свойство Effect?Я надеялся, что если бы я создал оверлей (как в примере), это сработало бы, но на самом деле эффект размытия влияет только на элемент управления и его дочерние элементы, а не его родительский элемент.Т.е. это не то же самое, что поместить матовое стекло поверх Grid1, что и было результатом, к которому я стремился.

Я предполагаю, что мне нужно сделать что-то грязное, например установить фон GridBlurOverlay в VisualBrush на основе Grid1, ноИнтересно, какой именно подход может быть, и есть ли что-то более элегантное (и с лучшей производительностью)?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

это то, что вы хотите?

РЕДАКТИРОВАТЬ (обновление)

<Grid HorizontalAlignment="Stretch"
      VerticalAlignment="Stretch">

  <Grid>
    <!-- you can activate this if you want this effect -->
    <Grid.Background>
      <SolidColorBrush Color="Gray" Opacity="0.6"/>
    </Grid.Background>
    <Grid.Effect>
      <BlurEffect Radius="5"/>
    </Grid.Effect>

    <TextBlock VerticalAlignment="Top"
               Text="Some Controls"
               FontSize="60" />
  </Grid>

  <Border Background="Gray" HorizontalAlignment="Center" VerticalAlignment="Center">
    <TextBlock Text="Please Wait"
               FontSize="60" />
  </Border>
</Grid>  
0 голосов
/ 16 ноября 2011

Если GridBlurOverlay является шумным и непрозрачным, разве игра с его непрозрачностью не даст вам желаемого эффекта?

...