문제

WPF RichTextBox가 있습니다 isReadOnly 로 설정 True. 사용자가 RichTextBox에 포함 된 하이퍼 링크를 클릭 할 수 있기를 원합니다. Ctrl 키.

하이퍼 링크의 클릭 이벤트는 Ctrl 키 고정되어 있으므로 진행 방법이 확실하지 않습니다.

도움이 되었습니까?

해결책 3

우연히이 주변의 길을 찾았습니다.

내 RichTextBox에로드 된 컨텐츠는 일반 문자열로 저장 (또는 입력)입니다. RichTextBox를 서브 클래스하여 문서 속성에 대한 바인딩을 허용했습니다.

질문과 관련된 것은 이와 같은 모습을 보이는 ivalueconverter convert () 오버로드가 있다는 것입니다 (솔루션에 대한 필수적인 코드가 제거되었습니다).

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를 "true"로 설정하고 isreadonly를 "true"로 설정하십시오.

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

이 작업을 수행하면 하이퍼 링크 태그 내에 표시된 텍스트 위에 마우스를 마우기에 마우스가 '손'으로 변합니다. 제어를 유지하지 않고 클릭하면 '클릭'이벤트가 시작됩니다.

.NET 4에서 WPF를 사용하고 있습니다. 이전 버전의 .NET가 위에서 설명한대로 작동하지 않는지 모르겠습니다.

jhubbard80의 대답은 가능한 솔루션입니다. 컨텐츠를 선택할 필요가없는 경우 가장 쉬운 방법입니다.

그러나 나는 그것을 필요로한다 : p 여기 나의 접근법이다 : Hyperlink내부 RichTextBox. 필수는 사용하는 것입니다 EventSetter 만들기 위해 Hyperlinks 처리 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 영감을 위해.

클릭 이벤트 대신 Mouseleftbuttondown 이벤트를 처리 해 보셨습니까?

@Hillin의 답변에서 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