我有一个这样的流程文件:

var mcFlowDoc = new FlowDocument();
var para = new Paragraph();
para.Inlines.Add(textBlock1);
para.Inlines.Add(textBlock2);
para.Inlines.Add(textBlock3);
mcFlowDoc.Blocks.Add(para);
richTextBox1.Document = mcFlowDoc;

我需要一个事件来触发鼠标点击文本块:
    <RichTextBox Margin="10,10,230,12" Name="richTextBox1" FontFamily="Simplified Arabic" FontSize="16" IsReadOnly="True" IsReadOnlyCaretVisible="False" ForceCursor="False" FlowDirection="RightToLeft" VerticalScrollBarVisibility="Auto">
        <RichTextBox.Resources>
            <Style TargetType="Run">
                <EventSetter Event="MouseLeftButtonDown" Handler="Run_Click" />
            </Style>
            <Style TargetType="TextBlock">
                <EventSetter Event="MouseLeftButtonDown" Handler="TextBlock_Click" />
            </Style>
        </RichTextBox.Resources>
    </RichTextBox>

void TextBlock_Click(object sender, MouseButtonEventArgs e)
        {
            TextBlock tb = sender as TextBlock;
        }

Run 的事件处理程序被调用并正常工作( Changing inline in flowdocument ),但 TextBlock 的事件处理程序不是。

我究竟做错了什么?
谢谢

最佳答案

来自 MSDN 的引用:

所以你需要寻找替代品。我可以推荐几个。
首先,您可以为所有 PreviewMouseDown 设置事件处理程序 RichTextBox :

<RichTextBox PreviewMouseDown="TextBlock_Click" ... />
其次,使用 BlockUIContainer 并将文本放入内容按钮中。例如:
<Paragraph FontSize="18">Flow Example</Paragraph>

<BlockUIContainer>
  <Button x:Name="MyButton" ClickMode="Release" Click="Button_Click">
    <TextBlock Margin="4" TextWrapping="Wrap">
      Some text
    </TextBlock>
  </Button>
</BlockUIContainer>
第三,您可以为 Paragraph 设置事件处理程序,如下所示:
var para = new Paragraph();
para.Inlines.Add(textBlock1);

para.MouseLeftButtonDown += new MouseButtonEventHandler(TextBlock_Click);
Edit
引用 Adam Nathan 的书 WPF 4 Unleashed :

事件开始起作用,需要添加 BlockUIContainer 并将 IsDocumentEnabled 属性设置为 true(在 RichTextBox 中),否则事件将无法完全起作用。
一般来说,我不明白为什么你需要在 TextBlock 里面 RichTextBox 。使用它的标准功能,它们几乎涵盖了 RunParagraph 等。如果它们不匹配,则没有理由使用 RichTextBox
请参阅关于 RichTextBox here 的好教程。

关于c# - 单击 WPF 富文本框中的 TextBlock,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17908449/

10-15 03:51