كيف يمكنني العثور على المنطقة القابلة للعرض في WPF RichTextBox؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

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

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

سؤالي.هل هناك طريقة لتحديد المساحة القابلة للعرض في RichTextBox وبالتالي إجراء عملية حسابية حول كيفية وضع علامة الإقحام بشكل صحيح؟إذا كانت لدي هذه القيمة، فيمكنني بعد ذلك أن أقرر ما إذا كنت سأضع علامة الإقحام في المنتصف (وتعرف مكان الوسط) أو في الأعلى.شكرا لمساعدتك.

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

المحلول

لقد حلت هذه المشكلة.يحتوي RichTextBox على خاصية VerticalOffset والتي عند إضافتها إلى موضع مؤشر النص ستمنحك الإزاحة الفعلية.

باستخدام الإزاحة، يمكنك استخدام RichTextBox.ScrollToVerticalOffset للتمرير في المربع استنادًا إلى خاصية RichTextBox.ActualHeight.

مثال:افترض أن لدي TextPoint المؤشر1 في الموضع الذي أريد التمرير إليه

Rect thisposition = pointer1.GetCharacterRect(LogicalDirection.Forward);

richTextBox1.Focus();
richTextBox1.CaretPosition = pointer1;


double totaloffset = thisposition.Top + richTextBox1.VerticalOffset;
richTextBox1.ScrollToVerticalOffset(totaloffset - richTextBox1.ActualHeight / 2);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top