none
RTF框中的图片如何设置双击事件? RRS feed

  • 问题

  • RTF代码如下,里面放了一张图片:

            <RichTextBox Background="Aquamarine" Grid.Row="1" Name="MyRichTextBox">
                <FlowDocument ScrollViewer.VerticalScrollBarVisibility="Auto">
                    <Paragraph>
                        <InlineUIContainer>
                            <Image HorizontalAlignment="Left" Source="/Images/admin.jpg" Stretch="None"></Image>
                        </InlineUIContainer>
                    </Paragraph>
                </FlowDocument>
            </RichTextBox>
    

    然后做个按钮,点击事件:

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                foreach (Block b in MyRichTextBox.Document.Blocks)
                {
                    if (b is Paragraph)
                    {
                        Paragraph p = b as Paragraph;
                        foreach (Inline inlineObj in p.Inlines)
                        {
                            if (inlineObj is InlineUIContainer)
                            {
                                InlineUIContainer imgContainer = inlineObj as InlineUIContainer;
                                if (imgContainer.Child is Image)
                                {
                                    Image im = imgContainer.Child as Image;
                                    im.MouseLeftButtonDown += Im_MouseLeftButtonDown;
                                }
                            }
                        }
                    }
                }
            }
    
            private void Im_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                if (e.ClickCount == 2)
                {
                    MessageBox.Show("双击了图片");
                }
            }
    

    点击按钮的时候确认已经运行了:

    im.MouseLeftButtonDown += Im_MouseLeftButtonDown;

    可是为何双击图片的时候没有任何反应?


    da jia hao!

    2019年11月8日 10:00

全部回复

  • Hi,

    使用下面代码试一下:

     im.AddHandler(Image.MouseLeftButtonDownEvent, new MouseButtonEventHandler(Im_MouseLeftButtonDown), true);

    https://www.cnblogs.com/tianciliangen/p/4885457.html

    Best Regards,

    Alex

    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。




    2019年11月11日 1:55
    版主
  • 没效果的。。。

    da jia hao!

    2019年11月11日 9:08
  • 我直接用了窗体的PreviewMouseDoubleClick才解决了问题:

            private void Window_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                if (e.LeftButton== MouseButtonState.Pressed)
                {
                    if (e.OriginalSource is Image)
                    {
                        Image im = e.OriginalSource as Image;
                        if (im.Parent is InlineUIContainer)
                        {
                            Console.WriteLine("双击了");
                            e.Handled = true;
                        }
                    }
                }
            }
    

    那个IMage的MouseLeftButtonDown难道是假的吗?


    da jia hao!

    • 已建议为答案 ARM830 2019年11月12日 7:14
    2019年11月12日 6:35
  • 不一定,有可能是在源代码级别就被别的事件所使用,有的控件就是如此,在MSDN中应该会特别指明。

    例如button的空格事件则必须是隧道事件。

    2019年11月12日 7:14
  • 没效果的。。。

    da jia hao!

    Hi,

    我尝试我的代码是成功的,不知为什么你会失败,如果问题已经解决,请将你的回复标记为答案。

    Best Regards,

    Alex

    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。



    2019年11月28日 2:30
    版主