النقر على الارتباطات التشعبية في RichTextBox دون تعليق CTRL - WPF

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

سؤال

لدي WPF Richtextbox مع isReadOnly ضبط ل True. وبعد أود أن يكون المستخدمون قادرين على النقر فوق الارتباطات التشعبية الموجودة داخل RichTextBox، دون أن يتمتع بالاستمرار كنترول.

لا يبدو أن حدث Click على الارتباط التشعبي يطلق النار إلا كنترول يقام، لذلك أنا غير متأكد من كيفية المتابعة.

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

المحلول 3

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

يتم تخزين المحتوى الذي تم تحميله في My RichTextBox (أو مدخلات) كسلسلة عادية. لقد قمت بتصفية RichTextBox للسماح بإرساء ملكية وثيقة.

ما هو ذا صلة بالسؤال، هو أنه لدي تحميل Overload () ovalueconverter () ينظر إلى شيء مثل هذا (رمز غير ضروري للحل قد تم تجريده):

FlowDocument doc = new FlowDocument();
Paragraph graph = new Paragraph();

Hyperlink textLink = new Hyperlink(new Run(textSplit));
textLink.NavigateUri = new Uri(textSplit);
textLink.RequestNavigate += 
  new System.Windows.Navigation.RequestNavigateEventHandler(navHandler);

graph.Inlines.Add(textLink);
graph.Inlines.Add(new Run(nonLinkStrings));

doc.Blocks.Add(graph);

return doc;

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

نصائح أخرى

لقد وجدت حلا. اضبط ISDocumentEnabled على "صحيح" وتعيين isreadonly إلى "صحيح".

<RichTextBox IsReadOnly="True" IsDocumentEnabled="True" />

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

أنا أستخدم WPF من .NET 4. لا أعرف ما إذا كانت الإصدارات السابقة من .NET لا تعمل كما أصفت أعلاه.

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

ومع ذلك، أحتاج إلى أن: P هنا هو نهجي: تعيين أسلوب ل Hyperlinkق داخل RichTextBox. وبعد الأساسي هو استخدام EventSetter لتصنع Hyperlinkالمناولة MouseLeftButtonDown حدث.

<RichTextBox>
    <RichTextBox.Resources>
        <Style TargetType="Hyperlink">
            <Setter Property="Cursor" Value="Hand" />
            <EventSetter Event="MouseLeftButtonDown" Handler="Hyperlink_MouseLeftButtonDown" />
        </Style>
    </RichTextBox.Resources>
</RichTextBox>

وفي CodeBehind:

private void Hyperlink_MouseLeftButtonDown(object sender, MouseEventArgs e)
{
    var hyperlink = (Hyperlink)sender;
    Process.Start(hyperlink.NavigateUri.ToString());
}

بفضل gcores. للتلامي.

هل حاولت التعامل مع حدث mouseleftbutondondown بدلا من الحدث click؟

لقد غيرت eventsetter من إجابة @ هيلين.mouseleftbuttondown. لم تنجح في التعليمات البرمجية (.NET Framework 4.5.2).

<EventSetter Event="RequestNavigate" Handler="Hyperlink_RequestNavigate" />
private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
    Process.Start(e.Uri.ToString());
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top