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. JNDI和连接池的配置

    什么是JNDI: Java Naming and Directory Interface,Java命名和目录接口 通过名称将资源与服务进行关联 配置JNDI的步骤:在tomcat下的Context.x ...

  3. odoo12 Tree视图创建编辑旁边新增按钮,并根据条件隐藏

    前言 我们通常在form视图中可以很简单地在header里面添加按钮,但是在某些情况下,我们也需要在Tree视图中添加按钮,但是odoo官方目前没有给我们提供相应的接口,因此,我们尝试自己来实现它.最 ...

  4. 调试备忘录-NTC电阻的使用(教程 + 代码)

    软件环境:CodeWarrior 11.1 硬件环境:NXP S9KEAZ64A 传感器参数:NTC热敏电阻(R25 = 50k,B25-50 3950) 写在前面 最近做小项目需要用到NTC电阻,因 ...

  5. SpringMVC4——视图、视图解析器、国际化

    视图.视图解析器.国际化 视图的顶级接口:View 视图解析器:ViewResolver   常见的视图和解析器: InternalResourceView.InternalResourceViewR ...

  6. Python之运维

    这几日一直研究运维监控的事情,有次看见有一个脚本写的还不错,如今已经找不到地址了 就只能用Python代替shell了 其中原理是 监控 /proc/下的各种文件,/proc/ 顾名思义其为进程的文件 ...

  7. random模块python

    random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.random()    用于生成一个随机浮点数:range[0.0,1.0) ? 1 2 import ran ...

  8. 操作系统-文件系统(5)Linux文件系统管理

    主流分区机制有MBR和GPT两种 MBR分区:第一个扇区最重要,里面有:引导代码(Bootstrap code area)及分区表(partition table), 其中Bootstrap code ...

  9. anaconda3 安装pip3

    事先安装了anaconda3版本,此时想要安装pip3,需要: https://bootstrap.pypa.io/get-pip.py 打开链接,将文本存到本地,命名为get_pip.py. 然后通 ...

  10. 软件工程第二次作业(Junit和GoogleTest)

    使用Eclipse的Junit框架进行单元测试 一.前言 我的电脑因为以前学过安卓开发,已经安装好了eclipse,看了邹欣老师的博客,博客上讲的的非常详细,所以在进行的过程中遇到困难,基本都能解决. ...