2011-10-19 4 views
5

В конечном итоге я хочу, чтобы в какой-то степени была репликация функциональности Aero Glass для элемента управления содержимым WPF.Размытие фона контейнера WPF

Если я применяю BlurEffect к StackPanel, который содержит TextBlock, я буду иметь текст по TextBlock «s размыты.

Рассмотрим примеры:

Нет размытия

no blur

и <BlurEffect Radius="5" KernelType="Gaussian"/>

with blur

Но есть способ WPF, чтобы размыть фон позади панели, и не это содержание?

Основание StackPanel - это рабочий стол, а в окне, где размещается его, установлено значение AllowTransparency="True", чтобы обеспечить оформление в индивидуальном порядке.

+1

Обратите внимание, что фон не размыт во втором изображении, просто текст. Я не уверен, насколько легко будет добиться желаемого эффекта. Этот quesiton говорит о реализации пользовательских шейдеров ... http://stackoverflow.com/questions/1304347/alternative-of-blur-effect-on-drawingvisual Возможно, это поможет. –

+1

Также проверьте этот материал p/Invoke, чтобы использовать собственный API-интерфейс: http://dotnet.dzone.com/articles/aero-glass-wpf-window –

ответ

1

Какой фон StackPanel? ImageBrush? Если да, почему вы не можете применить BlurEffect к этому?

Если это невозможно, то попробовать это ..

1] Используйте изображение и сделать его полностью над Grid, как я вижу, вы не хотите TileEffect. Добавить BlurEffect на этот Image. Убедитесь, что вы заполняете изображение равномерно.

2] Затем добавить StackPanel с прозрачным фоном в следующего ребенка в Grid т.е. DonT в обратном порядке изображения и StackPanel.

3] Затем добавьте TextBlock в StackPanel.

ИЛИ

Если вы настаиваете на использовании Brush быть установлен как backgrounnd панели затем использовать VisualBrush, которая рисует размытое изображение в качестве фона в StackPanel, вместо ImageBrush.

Сообщите мне, если поможет любой из этих советов.

+0

Он пытается размыть фон рабочего стола Windows, а не какой-либо элемент в WPF. – Oggy

+0

То, что я пытаюсь ему помочь. насколько я знаю, кисти не могут быть размыты. Поэтому я дал ему возможность размыть изображение, а затем нарисовать его в качестве фона панели стека. Такой же намек уже указан в MSDN ... http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/12fbdc6d-0850-4379-b357-bc8a0abc03f3 –

+0

У него нет изображения в его заявление. – Oggy

5

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

Обычно используется сетка так:

<Grid> 
    <Border> 
    <Border.Effect> 
     <BlurEffect Radius="5" KernelType="Gaussian"/> 
    </Border.Effect/> 
    </Border> 
    <TextBlock .../> 
</Grid> 

В вашем примере, что не будет никакой разницы, хотя. Что именно вы пытаетесь размыть?

+0

Вам нужно будет поместить изображение в ту часть, которая была размыта. Обратите внимание, что фон в этом изображении не размывается, хотя текст ... –

0

Вы можете использовать SetWindowCompositionAttribute на Systems.Window, но затем вынуждены установить Оформление_окно в «None» и реализовать свой собственный родной Funtionality окна и ручку. Также наследование от пользовательского элемента управления довольно сложно. Короче говоря, есть BlurryControls.

Вы можете найти его с помощью NuGet при просмотре на «BlurryControls» или проверить код самостоятельно на GitHub. В любом случае, я надеюсь, что это будет полезно. Он использует .NET 4.5.2 и работает только для Windows10, так как нет решения этой проблемы в Windows8, а в более ранних версиях (Windows7 и Vista) вы можете достичь этого, обратившись к DwmEnableBlurBehindWindow.

На GitHub вы также найдете образец приложения под названием BlurryWindowInvoker.

Смежные вопросы