كيفية التحكم في الطلب عند استخدام ArrangeOverride لتمديد عناصر التحكم WPF

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

سؤال

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

شكرا!

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

المحلول

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

الخدعة الواحدة هنا هي معرفة كيفية تمثيل مضيف محتوى مربع النص. يجب أن يكون هذا scrollview مع الاسم part_contenthost. لذلك سوف تبدو القالب الخاص بك شيء مثل:

<ControlTemplate TargetType="{x:Type Ambog36sTextBox}">
  <Grid>
    <ScrollViewer x:Name="PART_ContentHost" />  <!-- WPF will fill in a text edit area here -->
    <Image Panel.ZIndex="1" Source="..." />
  </Grid>
</ControlTemplate>

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

نصائح أخرى

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

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