我有一个这样的流程文件:
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
。使用它的标准功能,它们几乎涵盖了 Run
、 Paragraph
等。如果它们不匹配,则没有理由使用 RichTextBox
。请参阅关于
RichTextBox
here 的好教程。关于c# - 单击 WPF 富文本框中的 TextBlock,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17908449/