سؤال

أحاول معرفة سبب عدم احترام عنصر التحكم لـ ZIndex.

المثال 1 - الذي يعمل بشكل جيد

   <Canvas>
       <Rectangle Canvas.ZIndex="1" Height="400" Width="600" Fill="Yellow"/>
       <Rectangle Canvas.ZIndex="2" Height="100" Width="100" Fill="Red"/>
   </Canvas>

المثال 2 - الذي لا يعمل

   <Canvas>
       <WebBrowser Canvas.ZIndex="1" Height="400" Width="600" Source="http://www.stackoverflow.com"/>
       <Rectangle Canvas.ZIndex="2" Height="100" Width="100" Fill="Red"/>
  </Canvas>

شكرا ، - إد

هل كانت مفيدة؟

المحلول

لسوء الحظ، يرجع ذلك إلى أن عنصر تحكم WebBrowser عبارة عن غلاف حول عنصر تحكم Internet Explorer COM.هذا يعني أنها تحصل على HWND الخاص بها ولا تسمح لـ WPF برسم أي شيء فوقها.لديها نفس القيود مثل استضافة أي عنصر تحكم Win32 أو WinForms آخر في WPF.

MSDN يحتوي على مزيد من المعلومات حول التشغيل المتداخل لـ WPF/Win32.

نصائح أخرى

أنت تواجه مأزقًا شائعًا لـ WPF، يُطلق عليه عادةً "مشكلة المجال الجوي".الحل المحتمل هو عدم استخدام عنصر تحكم WebBrowser، وبدلاً من ذلك اختر شيئًا أكثر جنونًا - أي متصفح WebKit المضمن الذي يعرض مباشرة إلى WPF.هناك حزمتان تقومان بذلك؛Awesomonium (تجاري) و Berkelium (مفتوح المصدر).يوجد غلاف .NET لكلاهما.

يمكنك SetWindowRgn لتزييف المنطقة المتداخلة عن طريق إخفائها كما هو موضح هنا:

لقد قمت بحل مشكلة مماثلة حيث كنت أستضيف عنصر تحكم WinForms لجهة خارجية في تطبيق WPF الخاص بي.لقد قمت بإنشاء عنصر تحكم WPF يعرض عنصر التحكم WinForms في الذاكرة ثم يرسمه على شكل صورة نقطية.ثم أستخدم DrawImage في طريقة OnRender لرسم المحتوى المعروض.أخيرًا قمت بتوجيه أحداث الماوس من عنصر التحكم الخاص بي إلى عنصر التحكم المستضاف.في حالة متصفح الويب، سيتعين عليك أيضًا توجيه أحداث لوحة المفاتيح.

كانت حالتي سهلة إلى حد ما - مخطط يحتوي على بعض التفاعلات البسيطة بالماوس.قد يكون لعنصر التحكم في متصفح الويب مشكلات أخرى لم آخذها بعين الاعتبار.على أي حال آمل أن يساعد.

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

تعمل حاليا على الحل التالي:

  1. عندما يبدأ سحب الصورة، قم بإنشاء صورة نقطية لمتصفح الويب باستخدام "RenderTargetBitmap"
  2. أضف الصورة النقطية إلى اللوحة القماشية، باستخدام نفس العرض/الموقع مثل متصفح الويب
  3. webControl.Visibility = Visibility.Hidden.
  4. عندما يتم تحرير السحب، قم بإزالة الصورة النقطية وقم بتعيين webControl.Visibility = Visible.

هذا الحل خاص جدًا بحالتي، ولكن ربما سيعطيك بعض الأفكار.

تمكنت من حل هذه المشكلة باستخدام هذه البنية، وتحقق من تكوين الخصائص في كل عنصر:

<Canvas ClipToBounds="False">
     <Popup AllowsTransparency="True" ClipToBounds="False" IsOpen="True">
         <Expander>
            <Grid x:Name="YourContent"/>
         </Expander>
     <Popup>
</Canvas>

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

قم بإلقاء نظرة على هذه الصورة مع النتيجة، ويمكنك حتى إظهار عناصر التحكم الخاصة بك أعلى متصفح الويب وحتى خارج النافذة الرئيسية:

enter image description here

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