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. iOS Abort问题系统性解决方案

    一.背景 崩溃(Crash),即闪退,多指移动设备(如iOS.Android设备)在打开/使用应用程序的过程中,突然出现意外退出/中断的情况.如果App线上版本频繁发生崩溃,会极大地影响用户体验,甚至 ...

  2. 将本地项目推送到远程gitee仓库(通过git命令)

    只有经历过地狱般的磨砺,才能练就创造天堂的力量: 只有流过血的手指,才能弹出世间的绝响 将本地的项目推送到远程gitee仓库 本地新建的Java项目,想推送到远程gitee仓库或者git仓库,你需要两 ...

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

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

  4. Redis设计与实现——独立功能的实现

    发布和订阅 频道的订阅和退订 struct redisServer{ //键是被订阅者频道 ,键是一个链表,记录所有订阅这个频道的客户端 dict *publish_channels } 订阅实现: ...

  5. 理解C#中的ConfigureAwait

    原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获 ...

  6. SpringMVC使用Session

    Session在用户登录,一些特殊场合在页面间传递数据的时候会经常用到 @ 目录 修改IndexController check.jsp 效果 修改IndexController 映射 /check ...

  7. MapReduce框架原理

    MapReduce框架原理 3.1 InputFormat数据输入 3.1.1 切片与MapTask并行度决定机制 1.问题引出 MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个J ...

  8. 「完整案例」基于Socket开发TCP传输客户端

    ​1 程序界面设计 TCP客户端在上位机开发中应用很广,大多数情况下,上位机软件都是作为一个TCP客户端来与PLC或其他服务器进行通信的.TCP客户端的主要功能就是连接服务器.发送数据.接收数据.断开 ...

  9. Mybatis分页插件: pageHelper的使用及其原理解析

    在实际工作中,很进行列表查询的场景,我们往往都需要做两个步骤:1. 查询所需页数对应数据:2. 统计符合条件的数据总数:而这,又会导致我们必然至少要写2个sql进行操作.这无形中增加了我们的工作量,另 ...

  10. SuperSlide轮播切换

    <!-- 点击切换引入 --> <script type="text/javascript" src="js/jquery.js">&l ...