Подтвердить что ты не робот

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

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

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

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

Mockup Image

4b9b3361

Ответ 1

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, который медленнее и теперь обесценивается, как упоминалось в комментариях ниже Стивена Роббинса.

Ответ 2

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

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