Размытие фона контейнера WPF
в конечном счете, то, что я хочу достичь, - это репликация в некоторой степени функциональности Aero glass элемента управления содержимым WPF.
если я применю BlurEffect
до StackPanel
, которая содержит TextBlock
, у меня будет TextBlock
текст размыт.
Рассмотрим пример:
нет размытости
и <BlurEffect Radius="5" KernelType="Gaussian"/>
но есть ли способ WPF размыть фон за панелью и не содержимое?
фоне StackPanel
- это рабочий стол, а окно, в котором он размещается, имеет значение AllowTransparency="True"
разрешить пользовательские-образный вид.
3 ответов
что фон StackPanel? методу imagebrush? Если да, то почему вы не можете применить BlurEffect к этому?
если это невозможно, попробуйте это..
1] используйте изображение и нарисуйте его полностью над Grid
Как я вижу, вы не хотите TileEffect
. Добавить BlurEffect
этой Image
. Убедитесь, что вы заполняете изображение равномерно.
2] Затем добавить StackPanel
С прозрачным фоном как следующего ребенка на Grid
т. е. не обратный порядок изображение и stackpanel.
3] Затем добавить TextBlock
в StackPanel.
или
если вы настаиваете на использовании Brush
для установки в качестве backgrounnd панели затем используйте VisualBrush
который рисует размытое изображение в качестве фона stackpanel, а не ImageBrush
.
Дайте мне знать, если любой из этих советов поможет.
нет, это невозможно. Эффект применяется к элементу и все его дети но вы можете легко разместить TextBlock вне контейнера, а не внутри него.
обычно вы бы использовали сетку так:
<Grid>
<Border>
<Border.Effect>
<BlurEffect Radius="5" KernelType="Gaussian"/>
</Border.Effect/>
</Border>
<TextBlock .../>
</Grid>
в вашем примере это не будет иметь никакого значения. Что именно ты пытаешься размыть?
можно использовать SetWindowCompositionAttribute на систем.Window, но затем вы вынуждены установить WindowStyle в "None" и реализовать собственную собственную функциональность и дескрипторы окна. Также наследование от пользовательского элемента управления довольно сложно. Короче говоря, есть BlurryControls.
вы можете найти его через NuGet для при просмотре "BlurryControls" или проверить код самостоятельно на GitHub. Надеюсь, что так и будет. это полезно. Он использует .NET 4.5.2 и работает только для Windows10, поскольку в Windows8 нет решения этой проблемы, а в более ранних версиях (Windows7 и Vista) вы можете достичь этого, обратившись к DwmEnableBlurBehindWindow.
на GitHub вы также найдете пример приложения под названием BlurryWindowInvoker.