1.先看结构:

创建WPF用户控件:YourTab

创建WPF用户控件:YourItem

创建选项卡时循环添加item,并设置序列缩略图到控件和异步下载的进度条,

1个病人1个或多个Study检查,1个Study检查1个选项卡,并为每个选项卡添加自定义关闭按钮

Tab自定义关闭按钮的XAML样式如下:

   <Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid Margin="-2">
<Border Name="Border" BorderThickness="2" Margin="0,2,0,1" >
<Grid>
<ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="5,5,25,5" />
<Button x:Name="BtnCloseTab" Margin="130,-1,1,-1" Width="25" BorderBrush="#555555" BorderThickness="3,1,1,1" Style="{StaticResource ButtonStyle}" MouseEnter="Btn_MouseEnter" MouseLeave="Btn_MouseLeave" Click="BtnCloseTab_Click">
<Button.Content>
<Grid>
<Image Source="/PACS;component/Resources/关闭.png" Margin="-5"/>
<TextBlock Text="关闭" Visibility="Collapsed"></TextBlock>
</Grid>
</Button.Content>
</Button>
</Grid>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="#191919" />
<Setter TargetName="Border" Property="BorderBrush" Value="#555555" />
</Trigger>
<Trigger Property="IsSelected" Value="False">
<Setter TargetName="Border" Property="Background" Value="#292929" />
<Setter TargetName="Border" Property="BorderBrush" Value="#555555" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="Background" Value="#3E3E3E" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

2.为Item创建模仿2D建筑游戏的拖拽效果

先创建一个WinForm窗体:

设置窗体属性:窗体位置跟随鼠标,透明度75%,无边框,ShowInTaskBar属性设为False,当在Item上按下鼠标并拖动时则创建一个窗体并设置背景图片和缩略图一致。

看效果:

3.创建右键菜单导出DCM或JPG或视频

    <ContextMenu x:Name="menu">
<MenuItem Header="清除关联序列" Click="RelationClear_Click">
<MenuItem.Icon>
<ImageBrush ImageSource="/PACS;component/Resources/清除.png"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="导出Dicom文件">
<MenuItem.Icon>
<ImageBrush ImageSource="/PACS;component/Resources/文件.png"/>
</MenuItem.Icon>
<MenuItem Header="当前序列" Click="ExportDicom_Click" Width="140"></MenuItem>
<MenuItem Header="所有序列" Click="ExportAllDicom_Click"></MenuItem>
</MenuItem>
<MenuItem Header="导出图片文件">
<MenuItem.Icon>
<ImageBrush ImageSource="/PACS;component/Resources/图片.png"/>
</MenuItem.Icon>
<MenuItem Header="当前序列" Width="140" Click="ExportImage_Click"></MenuItem>
<MenuItem Header="所有序列" Click="ExportAllImage_Click"></MenuItem>
</MenuItem>
<MenuItem Header="导出视频文件">
<MenuItem.Icon>
<ImageBrush ImageSource="/PACS;component/Resources/视频.png"/>
</MenuItem.Icon>
<MenuItem Header="当前序列" Width="140" Click="ExportMedia_Click"></MenuItem>
<MenuItem Header="所有序列" Click="ExportAllMedia_Click"></MenuItem>
</MenuItem>
<MenuItem Header="推送该序列">
<MenuItem.Icon>
<ImageBrush ImageSource="/PACS;component/Resources/推送.png"/>
</MenuItem.Icon>
<MenuItem Header="当前序列" Width="140" Click="Send_Click"></MenuItem>
<MenuItem Header="所有序列" Click="SendAll_Click"></MenuItem>
</MenuItem>
</ContextMenu>

导出Dicom文件:你打开影像时下载的DCM文件在本地硬盘的路径,复制文件就行了。

导出图片文件:可以参考本系列文章的加载Dicom影像等章节。

导出视频文件:用第三方的图片转视频文件导出序列视频,推荐使用AForge。

推送:将当前序列推送到其他电脑或设备。

C#开发PACS医学影像处理系统(九):序列控件与拖拽的更多相关文章

  1. C#开发PACS医学影像处理系统(二):界面布局之菜单栏

    在菜单栏布局上,为了使用自定义窗体样式和按钮,我们需要先将窗体设置为无边框,然后添加一个Grid作为菜单栏并置顶,VerticalAlignment="Top" logo图片和标题 ...

  2. C#开发PACS医学影像处理系统(三):界面布局之工具栏

    工具栏布局采用WPF中Grid作为容器,按钮采用自定义样式和图标,并采用Separator分割线: XAML设计器代码: 其中  Style="{StaticResource ButtonS ...

  3. C#开发PACS医学影像处理系统(六):加载Dicom影像

    对于一款软件的扩展性和维护性来说,上层业务逻辑和UI表现一定要自己开发才有控制权,否则项目上线之后容易被掣肘, 而底层图像处理,我们不需要重复造轮子,这里推荐使用fo-dicom,同样基于Dicom3 ...

  4. C#开发PACS医学影像处理系统(十二):绘图处理之图形标记

    在医生实际使用过程中,对于有病灶的影像需要一些2D绘图操作,例如对于病灶的标记和测量, 这就牵涉到在WPF中的2D绘图操作技术,一般的思路是监听鼠标的按下和抬起以及运动轨迹,目前整理出的常用绘图和测量 ...

  5. C#开发PACS医学影像处理系统(十三):绘图处理之病灶测量

    接上一篇文章,当我们可以绘制图形标记后,就可以在此操作类上面进行扩展, 比如测量类工具,目前整理出的常用绘图和测量功能如下: 测量工具类:(图形标记类请参考本系列文章:绘图处理之图形标记) 功能 说明 ...

  6. C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法

    1.定位线概念:某个方位的影像在另一个方向的影像上的投影相交线,例如横断面(从头到脚的方向)在矢状面(从左手到右手)上的影像投影面交线. 举个例子:右边的是MR(核磁共振)的某一帧切片,这是从头开始扫 ...

  7. C#开发PACS医学影像处理系统(十六):2D处理之影像平移和缩放

    1.平移,利用WPF中控件边距来控制位移: /// <summary> /// 平移图像 /// </summary> /// <param name="X&q ...

  8. C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转

    1.任意角度旋转 在XAML设计器中,设置RotateTransform属性 <InkCanvas x:Name="ToolInkCanvas" UseCustomCurso ...

  9. C#开发PACS医学影像处理系统(十四):处理Dicom影像窗宽窗位

    概念解释(网络资料): 窗宽: 窗宽指CT图像所显示的CT 值范围.在此CT值范围内的组织结构按其密度高低从白到黑分为16 个灰阶以供观察对比.例如,窗宽选定为100 Hu ,则人眼可分辨的CT值为1 ...

随机推荐

  1. 思维导图概览SpringCloud

    @ 目录 1.什么是微服务 1.1.架构演进 1.2.微服务架构 1.3.微服务解决方案 2.SpringCloud概览 2.1.什么是SpringCloud 2.1.SpringCloud主要组件 ...

  2. JS实例-01

    输入成绩(0-100),不同的分数段奖励不同while(true){var a=prompt('请输入成绩');if (a>=0&&a<=100){ break;}}if ...

  3. 悄咪咪提高团队幸福感 & Surprise!

    前言 本文的灵感是在几个月以前工作不忙(摸鱼)时想到的,老是自己一个人往前冲冲冲也没啥意思,需要想一点办法,来提高团队的效率,提高团队的幸福感(效率起来了,单位时间内代码写的更多,那不就幸福啦 ),经 ...

  4. Name jms can't bind to context问题解决

    需要把gis-datamanage包中的配置test改成compile

  5. SparkSQL /DataFrame /Spark RDD谁快?

    如题所示,SparkSQL /DataFrame /Spark RDD谁快? 按照官方宣传以及大部分人的理解,SparkSQL和DataFrame虽然基于RDD,但是由于对RDD做了优化,所以性能会优 ...

  6. Windows 右键 照片查看器 不见了--解决办法

    桌面新建 一个文本文档,将下边复制进去,另存为命名例如为:1.reg 双击运行1.reg,点‘是’,点确认即可. Windows Registry Editor Version 5.00 ; Chan ...

  7. SpringSecurity权限管理系统实战—七、处理一些问题

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  8. idea配置ssm框架

    详细教程如下:https://blog.csdn.net/GallenZhang/article/details/5193215 https://blog.csdn.net/qq_28008917/a ...

  9. pytest的fixture怎么用?

    文章总览图 fixture和unittest是冲突的.舍弃unittest只用pytest. 会遇到在很多用例当中,它的前置条件是长得一样的.用例写的越来越多的时候,肯定会遇到前置条件都差不多,大家差 ...

  10. spss如何把多个指标合并成一个变量?

    把多个指标合并成一个变量,通常有两种做法: 一.计算平均值 针对问卷量表数据,同时几个题表示一个维度.比如想要将“我在工作中能获得成就感”.“我可以在工作中发挥个人的才能”这两题合并成一个维度(影响因 ...