كيف يمكنك أن "الاندماج" في rendercycle WPF للحصول على نتائج دقيقة من VisualTreeHelper؟

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

سؤال

وأنا أكتب حاليا عنصر تحكم العضو WPF (الأم) التي يمكن أن تحتوي على عدة عناصر تحكم المستخدم الطفل (الطفل). أنا الذي يربط بين (الطفل) الضوابط مع الخطوط المتعددة.

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

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

وكيف يمكنني أن تحل في هذا هو من خلال تجاوز OnRender الضوابط طفلي ورفع حدث لبلدي التحكم الرئيسية لذلك يعرف أنه يمكن استخدام VisualTreeHelper للحصول على القيم الصحيحة.

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

وبلدي الحل الحالي يشعر أشبه الحل من الحل. كيف يمكنك أن "الاندماج" في rendercycle WPF للحصول على نتائج دقيقة من VisualTreeHelper؟

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

المحلول

وحاول تجاوز ArrangeOverride أو OnRender على مراقبة الوالدين. WPF لا تخطيط ثلاث مراحل / تقديم تمريرة: أولا، فإنه يطلب من الضوابط مقدار المساحة التي يحتاجونها (قياس)، ثم يقول الضوابط مقدار المساحة فإنها في الواقع قد أعطيت جميع الطلبات الواردة (ترتيب)، وبعد ذلك في الواقع توجه كل شيء داخل المناطق أعطيت كل عنصر تحكم (تقديم). لهذا العمل، ويترتب على شجرة البصرية - العنصر الجذر (مثلا، نافذة) وقال لقياس. عليها أن تسأل الأطفال لقياس، الذين لديهم أن نسأل أطفالهم، الخ على طول الطريق وصولا الى عناصر ورقة قبل أن يبدأ كل شيء يعود كل في طريق العودة إلى الجذر. ثم يبدأ في ترتيب تمريرة، وأخيرا تمرير تقديم.

ومن خلال مشاهدة OnRender للأطفال، وكنت تقول ضمنيا الذي تريد بدء الرسم بعد تدبير وترتيب وقوعها، ولكن قبل الوالدين يبدأ رسم نفسه. هذا ويمكن إجراء أي ما يعادل OnRender الوالدين - الذي يلتف OnRenders الأطفال. قد تكون ايضا قادرة على القيام بذلك في ArrangeOverride الوالد، الذي يلتف الأطفال ترتيب الممر، الذي هو فيه (IIRC) القيم VisualTreeHelper.GetOffset () المنافذ في الواقع الحصول على تعيين.

وأخيرا، من خلال النظر في مراقبة الوالدين، وكنت في انتظار ضمنيا لجميع الأطفال تسيطر على الانتهاء ترتيب / تقديم - وهو ما يعني أنك لن تضطر إلى قرد حول محاولة لمعرفة متى ينتهي آخر طفل تقديم .

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