您的位置:首页 > 其它

wpf RichTextBox 选中 图片

2015-08-17 17:24 253 查看
当图片被添加到RichTextBox中,即发生TextChanged事件,处理这个事件,把所有的BlockUIContainer取出来,并判断它的Child是不是Image控件,如果是,就为它们各加一个MouseLeftButtonDown事件处理,响应鼠标左键双击。

记得要设置: IsDocumentEnabled="True",不然双击没效果

【XAML】

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition Height="auto"/>

            <RowDefinition/>

        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="10">

            <Image x:Name="img" Stretch="Uniform" Height="60" Source="lan.jpg"/>

            <Button Margin="18,0,0,0" Content="复制图片" Click="onCopy" VerticalAlignment="Center"/>

            <Button Margin="25,0,0,0" Grid.Row="0" Content="粘贴" Click="onClick" VerticalAlignment="Center" Width="85"/>

        </StackPanel>

        <RichTextBox x:Name="rtb" Grid.Row="1" IsDocumentEnabled="True" TextChanged="rtb_TextChanged_1">

        </RichTextBox>

    </Grid>

【C#】

        private void onClick(object sender, RoutedEventArgs e)

        {

            //this.rtb.Paste();

        }

        private void onCopy(object sender, RoutedEventArgs e)

        {

            Clipboard.SetImage((BitmapSource)this.img.Source);

        }

        private void rtb_TextChanged_1(object sender, TextChangedEventArgs e)

        {

            var doc = this.rtb.Document;

            var blocks = doc.Blocks.ToArray();

            // 判断一下是不是BlockUIContainer

            // 有可能里面不只一个BlockUIContainer

            var imgBlocks = blocks.Where(b => b is BlockUIContainer).ToArray();

            // 查看每一个BlockUIContainer的子元素,

            // 判断是不是Image类

            foreach (var item in imgBlocks)

            {

                BlockUIContainer uic = (BlockUIContainer)item;

                if (uic.Child is Image)

                {

                    Image imgCtl = uic.Child as Image;

                    imgCtl.MouseLeftButtonDown -= imgCtl_MouseLeftButtonDown;

                    imgCtl.MouseLeftButtonDown += imgCtl_MouseLeftButtonDown;

                }

            }

        }

        void imgCtl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

        {

            // ClickCount为2表示双击

            if (e.ClickCount == 2)

            {

                MessageBox.Show("双击了图片");

            }

            e.Handled = true;

        }

运行的结果看看下图的截图。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: