الخلفية السوداء قبل تحميل التحكم في WPF عند استخدام ElementHost
-
21-09-2019 - |
سؤال
أنا أستخدم WPF في WinForms مع ElementHost. عندما يتم تحميل النموذج ، يكون هناك وميض من الخلفية السوداء حيث يكون جهاز ElementHost على وشك التحميل. هذا يبدو نوعا من السيئ. أي اقتراحات حول كيفية التخلص من هذا؟
المحلول
إخفاء العنصر (الرؤية = مخفية) حتى يتم تحميل التحكم في WinForms بالكامل ...
نصائح أخرى
تحتاج أولاً إلى تحكم العرض مع الحدود الفارغة لأول مرة لتجنب الخفقان الأسود
if (!_control.Created && _control.BackColor != Color.Transparent)
{
_control.Bounds = Rectangle.Empty;
_control.Show();
}
// set control bounds and show it
Rectangle bounds = GetBounds(context, rect);
if (_control.Bounds != bounds)
_control.Bounds = bounds;
if (!_control.Visible)
_control.Show();
أعلم أن هذا قد تمت الإجابة عليه بالفعل والسؤال قديم ولكن لم يعمل أي من الإجابات المقدمة بنفسي وبعد فترة طويلة من استكشاف الأخطاء وإصلاحها. لقد وجدت أخيرًا إجابة أسهل.
إذا قمت بإنشاء فئة تمتد من مضيف العنصر وفي المُنشئ الأولي. يمكنك تعيين حدث تحميل للحاوية المضيفة. الحاوية المضيفة هي اللوحة التي يتم عرضها على الطفل الذي يتم عرضه على رأسه. من هناك ، ما عليك سوى تعيين لون الخلفية للحاويات المضيفة إلى كونه من العنصر يستضيف لون خلفية الوالدين.
مثله
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
public class MyElementHost : ElementHost
{
public MyElementHost()
{
this.HostContainer.Loaded += new RoutedEventHandler(HostPanelLoad);
}
public void HostPanelLoad(object sender, RoutedEventArgs e)
{
System.Drawing.Color parentColor = this.Parent.BackColor;
this.HostContainer.Background = new SolidColorBrush(Color.FromArgb(parentColor.A, parentColor.R, parentColor.G, parentColor.B));
}
}