Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

610
Views
Desenfoque detrás de la ventana WPF transparente

Estoy tratando de crear una aplicación WPF con una ventana semitransparente sin bordes que difumina el fondo detrás de ella.

Aquí hay un ejemplo de lo que quiero hacer. Captura de pantalla

He intentado usar DwmEnableBlurBehindWindow , que solo funciona en Windows Vista/7.

Estoy tratando de encontrar una solución que funcione en Windows 7, 8 y 10.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Para cualquier persona interesada, encontré una solución para Windows 10. Parece que no es posible en Windows 8, como mencionó David Heffernan, DwmEnableBlurBehindWindow se eliminó de Windows 8, sin embargo, Microsoft reintrodujo una solución para lograr este efecto en Windows. 10

  • Windows 10: Solución usando SetWindowCompositionAttribute
  • Windows 8: Sin solución
  • Windows 7: puede continuar usando DwmEnableBlurBehindWindow
over 4 years ago · Santiago Trujillo Report

0

Espero no llegar tarde a la fiesta. Puede usar SetWindowCompositionAttribute, pero luego se ve obligado a establecer WindowStyle en "Ninguno" e implementar su propia funcionalidad y identificadores nativos de Windows. También heredar de un control personalizado es bastante complicado. Sin embargo, larga historia corta. Hay BlurryControls.

Puede encontrarlo a través de NuGet buscando "BlurryControls" o verifique el código usted mismo en GitHub . De todos modos, espero que esto sea útil.

En GitHub también encontrará una aplicación de muestra.

over 4 years ago · Santiago Trujillo Report

0

ventanas 8

Por mucho que sea un callejón sin salida que es mejor olvidar por completo, es posible que debamos asegurarnos de que nuestros programas se comporten de manera consistente en todas las versiones. Si no hay necesidad de un fondo dinámico y especialmente si la ventana es relativamente pequeña (un candidato principal sería un cuadro de mensaje o similar sobre nuestra propia ventana de aplicación), la solución de capturar la pantalla detrás de la ventana y desenfocarla manualmente podría funcionar. . En el controlador de eventos Loaded :

 var screen = window.Owner.PointToScreen(new System.Windows.Point((window.Owner.ActualWidth - window.ActualWidth) / 2, (window.Owner.ActualHeight - window.ActualHeight) / 2)); var rect = new Rectangle((int)screen.X, (int)screen.Y, (int)window.ActualWidth, (int)window.ActualHeight); var bitmap = new Bitmap(rect.Width, rect.Height); using (var graphics = Graphics.FromImage(bitmap)) graphics.CopyFromScreen(rect.Left, rect.Top, 0, 0, rect.Size); border.Background = new ImageBrush(ApplyGaussianBlur(bitmap.ToBitmapImage())) { TileMode = TileMode.None, Stretch = Stretch.None, AlignmentX = AlignmentX.Center, AlignmentY = AlignmentY.Center, };

donde border es un borde más externo Border normalmente se deja completamente vacío, solo se usa en Windows 8.

La función auxiliar es la conversión de mapa de bits habitual:

 public static BitmapSource ToBitmapImage(this System.Drawing.Bitmap image) { var hBitmap = image.GetHbitmap(); var bitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); DeleteObject(hBitmap); return bitmap; }

ApplyGaussianBlur() se resuelve mejor con un paquete de manipulación directa de mapas de bits como WriteableBitmapEx , con las modificaciones necesarias.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!