تؤدي حدود WPF الشفافة إلى توقف واجهة المستخدم عن إعادة الرسم

StackOverflow https://stackoverflow.com/questions/122857

سؤال

كمتابعة ل سؤالي السابق, أنا أتساءل عن كيفية استخدام النوافذ الشفافة بشكل صحيح.إذا قمت بتعيين نافذتي لاستخدام الشفافية، فستظهر واجهة المستخدم أحيانًا وكأنها تتوقف عن الاستجابة.ما يحدث بالفعل هو أن واجهة المستخدم ببساطة لا يتم تحديثها كما ينبغي.لا تظهر الرسوم المتحركة، ولا تظهر الصفحات للتنقل؛ومع ذلك، إذا شاهدت مصحح الأخطاء وهو ينقر على الأزرار والروابط وما إلى ذلك.العمل في الواقع.يؤدي تصغير النافذة واستعادتها إلى "اللحاق" بواجهة المستخدم مرة أخرى ويمكن للمستخدم مواصلة العمل حتى يعود السلوك.

إذا قمت بإزالة الحدود الشفافة، فلن يحدث هذا السلوك.هل أفعل شيئًا خاطئًا أم أن هناك إعدادات أو تعليمات برمجية أخرى وما إلى ذلك ...التي أحتاج إلى تنفيذها للعمل مع حدود شفافة بشكل صحيح؟

هذا هو إعلان نافذتي للرمز الذي فشل.

<Window x:Class="MyProject.MainContainer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF APplication" Height="600" Width="800"    
    xmlns:egc="ControlLibrary" Background="{x:Null}"
    BorderThickness="0"
    AllowsTransparency="True"
    MinHeight="300" MinWidth="400" WindowStyle="None" >

والكود الذي لا يحمل السلوك

<Window x:Class="MyProject.MainContainer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF Application" Height="600" Width="800"    
    xmlns:egc="ControlLibrary" Background="{x:Null}"
    BorderThickness="0"
    AllowsTransparency="False"
    MinHeight="300" MinWidth="400" WindowStyle="None" >
هل كانت مفيدة؟

المحلول 2

أعتقد أنني وجدت أخيرًا حلاً بديلاً.من كل ما قرأته، لا ينبغي أن تحدث هذه المشكلة مع XP SP3 و.NET 3.5 SP1، ولكنها موجودة بالفعل.

المثال من هذا بلوق وظيفة يوضح كيفية استخدام وظائف Win32 API لإنشاء نافذة غير منتظمة الشكل، وهو ما أفعله.بعد إعادة صياغة نافذتي الرئيسية لاستخدام هذه التقنيات، يبدو أن الأمور تعمل كما هو متوقع ولم يعد السلوك.

تجدر الإشارة أيضًا إلى أن سبب توصية المؤلف بهذه الطريقة يرجع إلى مشكلات الأداء مع WPF والنوافذ الشفافة.على الرغم من أنني أعتقد أنه قد يكون أفضل في .NET 3.5 SP1، إلا أن تنفيذ ذلك لم يكن صعبًا ويجب أن يكون أداؤه أفضل.

نصائح أخرى

هل تستخدم .NET 3.0 أو .NET 3.5 على نظام التشغيل Windows XP SP2؟إذا كان الأمر كذلك، فهذه مشكلة معروفة في واجهة برمجة تطبيقات النافذة الشفافة التي تم إصلاحها في .NET 3.5 وSP3 لنظام XP (وأعتقد SP1 لنظام التشغيل Vista).بشكل أساسي، عندما تقوم بتعيينAllowsTransparency على True، يجب أن يتم عرض خط أنابيب WPF في وضع البرنامج فقط.سيؤدي هذا إلى انخفاض كبير في الأداء في معظم الأنظمة.

لسوء الحظ، الشيء الوحيد الذي يمكنك القيام به لإصلاح ذلك هو الترقية إلى .NET 3.0 SP1 (المضمن في .NET 3.5)، وتثبيت حزمة الخدمة المناسبة لنظام التشغيل Windows.لاحظ أن النوافذ الشفافة لا تزال أبطأ، ولكنها ليست بنفس السوء.يمكنك العثور على مناقشة أكثر تعمقا هنا.

أستخدم نظام التشغيل Windows XP Pro SP3 وأستخدم .NET 3.5 SP1.لقد تحققت أيضًا من أن المشروع يستهدف الإصدار 3.5 من إطار العمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top