wpf RichTextBox 选中 图片

来源:互联网 发布:恒生电子软件开发待遇 编辑:程序博客网 时间:2024/05/13 23:40
当图片被添加到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;
        }

运行的结果看看下图的截图。
0 0
原创粉丝点击