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;
}
运行的结果看看下图的截图。
记得要设置: 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;
}
运行的结果看看下图的截图。
相关文章推荐
- 27.结构体
- zookeeper进阶(二)leader选举源码分析
- org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()
- oracle学习之第一个存储过程:打印Hello World
- avast 免费好用的杀毒软件
- JVM基本结构
- ZOJ 3228 Searching the String (AC自动机)
- 插件开发之无法解释的外部符号 DllCanUnloadNow和DllGetClassObject
- Java Socket 网络编程常见异常
- C. Case of Matryoshkas( Codeforces Round #310 (Div. 2) 模拟)
- 图片轮播器
- 按一定比例裁剪图片
- 如何学习FPGA——转自网络
- 26.static和extern关键字2-对变量的作用
- 文件、颜色、字体标准对话框使用
- error while loading shared libraries: libssl.so.6
- zabbix监控多实例tomcat--不使用JMX
- mysql数据库root用户密码忘记进行修改的办法
- 1.获取元素绝对位置
- 黑马程序员——JAVA基础之面向对象(上)