先看效果:
再看結構,Viewer(影像控件)分為N個Cell(單元格),每個單元格分為N個Box(影像容器),
當默認情況為2x2的行列時,結構如下圖:
其中,我們在WPF設計器中創建一個用戶控件叫Viewer,使用Grid容器,默認2x2,再根據自己的業務需要創建用戶控件Cell和用戶控件Box,
在Viewer中聲明變量集合來記錄Cell,同理,在Cell中聲明變量集合來記錄Box:
/// <summary> /// 圖像單元格集合 /// </summary> public List<ET_MedicalCell> Cells = new List<ET_MedicalCell>();
情況1:變換行列,例如從2x2 變換到3x3:
思路:在集合中添加子控件,為行列屬性設置觸發器,
private int rowsCount = 2; /// <summary> /// 單元格的行數 /// </summary> public int RowsCount { get { return rowsCount; } set {if (value < -1) { rowsCount = 0; } else if (value > 10) { rowsCount = 10; } else { rowsCount = value; } SetLayout(); SetCellCount(); } }
添加Cell:
ET_MedicalCell cell = new ET_MedicalCell(1, 1, this); MdiGrid.Children.Add(cell); Cells.Add(cell);
情況2:變換行列,平鋪與層疊切換:
思路:Cell數量始終為1,Box數量變為行列數量
情況3:單元格雙擊放大:
思路:Cell數量始終為1,Box數量始終為1
情況4:醫生實際使用中的復合操作:
思路:控制Cell和Box的數量,記錄好變換之前的位置,因為有可能會變回去,直接引用變換前的對象和位置即可,無需重新加載Dicom影像而浪費效率和資源。