размытая непрозрачность

Мне нужно создать прозрачный размытый фон. Предположим, у меня есть граница с белым размытым прозрачным фоном. Все, что находится за границей, размыто.

Я пытаюсь избежать зависимостей; В настоящее время я использую .NET 3.0 и хочу, чтобы он работал и с XP.

Мокап изображения:

Мокап


person Artur Carvalho    schedule 07.01.2009    source источник


Ответы (3)


VisualBrush можно использовать, чтобы приблизиться к тому, что вы хотите, но у него есть некоторые ограничения.

Пока вам нужен только эффект стекла внутри окна (а не эффект над другими окнами) и если размещение границы эффекта стекла строго контролируется, вы могли бы сделать что-то вроде этого: -

  <Grid>
    <Border x:Name="src" Background="Silver">
      <Label HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50">Hello World</Label>
    </Border>
    <Border Background="White" Margin="40" >
      <Border Opacity="0.5" >
          <Border.Effect>
            <BlurEffect Radius="10"/>
          </Border.Effect>
        <Border.Background>
          <VisualBrush  Visual="{Binding ElementName=src}" Stretch="None" />
        </Border.Background>
      </Border>
    </Border>
  </Grid>

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

Я использовал VisualBrushes много раз, обычно с TranslateTransforms, чтобы немного перемещать их, чтобы получить правильное изображение в нужном месте.

Обновлять:

Изменен XAML для использования Effect, а не BitmapEffect, который работает медленнее и теперь обесценивается, как упоминалось в комментариях Стивена Роббинса ниже.

person Rhys    schedule 07.01.2009
comment
Я почти могу сделать это с помощью Visual Brush. Как вы думаете, возможно ли сделать что-то вроде мокапа? Или это то, что вы имели в виду, когда говорили, что пока ... размещение границы со стеклянным эффектом строго контролируется? Спасибо! - person Artur Carvalho; 08.01.2009
comment
Нашел! Необходимое выравниваниеX=Выравнивание по левому краюY=Растягивание по верхнему краю=Нет. - person Artur Carvalho; 08.01.2009
comment
Хороший пример, но я бы не рекомендовал использовать BitmapEffect из соображений производительности. Даже если сейчас все выглядит хорошо, в будущем это может вас укусить. Вы можете изменить этот бит на ‹Border.Effect›‹BlurEffect Radius=10 /›‹/Border.Effect› - person Steven Robbins; 08.01.2009

Я предполагаю, что для этого вам понадобится использовать эффект, примененный к фоновому прямоугольнику или сетке.

Здесь есть приличная библиотека эффектов здесь, если вам это небезразлично.

person Steven Robbins    schedule 07.01.2009

Используйте Vista Glass.

person Eclipse    schedule 07.01.2009
comment
Ему нужна Виста. Я стараюсь избегать зависимостей. - person Artur Carvalho; 08.01.2009
comment
Это вариант только в том случае, если вы готовы перейти на более старые машины. - person Eclipse; 08.01.2009