FolderImageViewer.xaml 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. <Window x:Class="aipdev.FolderImageViewer"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:model="clr-namespace:AIPlatform.Protocol.Model;assembly=AIPlatform.Protocol"
  7. xmlns:entities="clr-namespace:AIPlatform.Protocol.Entities;assembly=AIPlatform.Protocol"
  8. xmlns:extensions="clr-namespace:aipdev.Extensions"
  9. xmlns:local="clr-namespace:aipdev"
  10. xmlns:viewmodel="clr-namespace:aipdev.ViewModel"
  11. mc:Ignorable="d"
  12. Title="图像浏览器" Height="800" Width="1280" ShowInTaskbar="False" WindowStartupLocation="CenterOwner">
  13. <Window.Resources>
  14. <Style TargetType="{x:Type TextBox}" x:Key="ReadOnlyTextBoxStyle">
  15. <Style.Setters>
  16. <Setter Property="IsReadOnly" Value="True"/>
  17. <Setter Property="Background" Value="Transparent"/>
  18. <Setter Property="Foreground" Value="White"/>
  19. <Setter Property="BorderThickness" Value="0"/>
  20. <Setter Property="HorizontalAlignment" Value="Center"/>
  21. <Setter Property="VerticalAlignment" Value="Center"/>
  22. </Style.Setters>
  23. </Style>
  24. </Window.Resources>
  25. <Grid Background="Black">
  26. <Grid.ColumnDefinitions>
  27. <ColumnDefinition Width="140"/>
  28. <ColumnDefinition Width="*"/>
  29. <ColumnDefinition Width="300"/>
  30. </Grid.ColumnDefinitions>
  31. <Grid Grid.Row="1" Grid.Column="0">
  32. <Border Grid.Row="1" BorderThickness="0.5" BorderBrush="Gray" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  33. <ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
  34. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  35. <ItemsControl x:Name="PreviewFiles">
  36. <!--<ItemsControl.ItemsPanel>
  37. <ItemsPanelTemplate>
  38. <WrapPanel>
  39. </WrapPanel>
  40. </ItemsPanelTemplate>
  41. </ItemsControl.ItemsPanel>-->
  42. <ItemsControl.Resources>
  43. <DataTemplate DataType="{x:Type viewmodel:PreviewFileViewModel}">
  44. <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Orientation="Vertical">
  45. <TextBlock Text="{Binding Modal.Title}" Margin="2" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="White"/>
  46. <ItemsControl>
  47. <Button OverridesDefaultStyle="True" x:Name="ImageButton" Margin="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="100" PreviewMouseLeftButtonDown="OnPreviewFileMouseLeftButtonDown">
  48. <Button.Template>
  49. <ControlTemplate>
  50. <Border x:Name="ImageBorder" BorderThickness="0.5" BorderBrush="Gray" CornerRadius="4" Background="Black"
  51. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  52. <Grid>
  53. <Grid.RowDefinitions>
  54. <RowDefinition Height="*"/>
  55. <RowDefinition Height="Auto"/>
  56. </Grid.RowDefinitions>
  57. <Image Source="{Binding PreviewImage.ImageData}" Grid.Row="0" Stretch="UniformToFill" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="2"/>
  58. <Image Source="Resources/Images/Question.png" VerticalAlignment="Top" HorizontalAlignment="Right" Width="20" Height="20"
  59. Visibility="{Binding HasQuestioned, Converter={extensions:BoolToVisibilityConverter}}" />
  60. <TextBlock Grid.Row="1" FontSize="12" Text="{Binding Type, Mode=OneWay}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="2" Foreground="White"/>
  61. </Grid>
  62. </Border>
  63. <ControlTemplate.Triggers>
  64. <Trigger Property="IsMouseOver" Value="True">
  65. <Setter TargetName="ImageBorder" Property="BorderBrush" Value="DeepSkyBlue"/>
  66. <Setter TargetName="ImageBorder" Property="BorderThickness" Value="2"/>
  67. </Trigger>
  68. <DataTrigger Binding="{Binding IsSelected}" Value="True">
  69. <Setter TargetName="ImageBorder" Property="BorderBrush" Value="DeepSkyBlue"/>
  70. <Setter TargetName="ImageBorder" Property="BorderThickness" Value="2"/>
  71. </DataTrigger>
  72. </ControlTemplate.Triggers>
  73. </ControlTemplate>
  74. </Button.Template>
  75. </Button>
  76. </ItemsControl>
  77. </StackPanel>
  78. </DataTemplate>
  79. </ItemsControl.Resources>
  80. </ItemsControl>
  81. </ScrollViewer>
  82. </Border>
  83. </Grid>
  84. <Grid Grid.Row="1" Grid.Column="1" Background="Black">
  85. <Grid.RowDefinitions>
  86. <RowDefinition Height="*"/>
  87. <RowDefinition Height="Auto"/>
  88. <RowDefinition Height="40"/>
  89. </Grid.RowDefinitions>
  90. <Grid.ColumnDefinitions>
  91. <ColumnDefinition Width="55"/>
  92. <ColumnDefinition Width="*"/>
  93. <ColumnDefinition Width="55"/>
  94. </Grid.ColumnDefinitions>
  95. <Button Grid.Column="0" Margin="4,0,0,0" x:Name="PreviousImage" Width="64" Height="2000" OverridesDefaultStyle="True" Click="OnPreviousImageClick">
  96. <Button.Template>
  97. <ControlTemplate>
  98. <Grid x:Name="Bb" Width="64">
  99. <Border Background="Black" Opacity="0.5"></Border>
  100. <Border x:Name="Bib">
  101. <Image Opacity="0.5" x:Name="Bi" Width="50" Height="50" Stretch="Uniform" VerticalAlignment="Center" HorizontalAlignment="Center" Source="Resources/Images/Previous3.png"></Image>
  102. </Border>
  103. </Grid>
  104. <ControlTemplate.Triggers>
  105. <Trigger Property="Button.IsMouseOver" Value="True">
  106. <Setter TargetName="Bi" Property="Opacity" Value="1"/>
  107. </Trigger>
  108. <Trigger Property="Button.IsPressed" Value="True">
  109. <Setter TargetName="Bib" Property="Padding" Value="2"/>
  110. </Trigger>
  111. </ControlTemplate.Triggers>
  112. </ControlTemplate>
  113. </Button.Template>
  114. </Button>
  115. <Grid Grid.Row="0" Grid.Column="1">
  116. <Image x:Name="Image" Grid.Column="0"/>
  117. <TextBlock x:Name="ImageIndex" Foreground="Red" FontSize="16" VerticalAlignment="Top" HorizontalAlignment="Left" IsHitTestVisible="False"/>
  118. </Grid>
  119. <Button Grid.Column="2" Margin="0,0,4,0" x:Name="NextImage" Width="64" Height="1000" OverridesDefaultStyle="True" Click="OnNextImageClick">
  120. <Button.Template>
  121. <ControlTemplate>
  122. <Grid x:Name="Bb" Width="64">
  123. <Border Background="Black" Opacity="0.5"></Border>
  124. <Border x:Name="Bib">
  125. <Image Opacity="0.5" x:Name="Bi" Width="50" Height="50" Stretch="Uniform" VerticalAlignment="Center" HorizontalAlignment="Center" Source="Resources/Images/Next3.png"></Image>
  126. </Border>
  127. </Grid>
  128. <ControlTemplate.Triggers>
  129. <Trigger Property="Button.IsMouseOver" Value="True">
  130. <Setter TargetName="Bi" Property="Opacity" Value="1"/>
  131. </Trigger>
  132. <Trigger Property="Button.IsPressed" Value="True">
  133. <Setter TargetName="Bib" Property="Padding" Value="2"/>
  134. </Trigger>
  135. </ControlTemplate.Triggers>
  136. </ControlTemplate>
  137. </Button.Template>
  138. </Button>
  139. <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" x:Name="VideoGrid">
  140. <Grid.RowDefinitions>
  141. <RowDefinition Height="Auto"/>
  142. <RowDefinition Height="Auto"/>
  143. </Grid.RowDefinitions>
  144. <Border Grid.Row="0" BorderThickness="0.5" BorderBrush="Gray">
  145. <ScrollViewer x:Name="VideoFramesScrollViewer" PanningMode="Both" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden"
  146. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  147. <ItemsControl x:Name="PreviewFrames" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling">
  148. <ItemsControl.ItemsPanel>
  149. <ItemsPanelTemplate>
  150. <VirtualizingStackPanel Orientation="Horizontal"/>
  151. </ItemsPanelTemplate>
  152. </ItemsControl.ItemsPanel>
  153. <ItemsControl.Resources>
  154. <DataTemplate DataType="{x:Type viewmodel:PreviewFrameViewModel}">
  155. <Button OverridesDefaultStyle="True" x:Name="FrameButton" HorizontalAlignment="Stretch" Height="100" Width="140" Margin="2" Click="OnPreviewFrameClick">
  156. <Button.Template>
  157. <ControlTemplate>
  158. <Border x:Name="FrameBorder" BorderThickness="0.5" BorderBrush="Gray" CornerRadius="4" Background="Black">
  159. <Grid>
  160. <Grid.RowDefinitions>
  161. <RowDefinition Height="*"/>
  162. <RowDefinition Height="Auto"/>
  163. </Grid.RowDefinitions>
  164. <Image Grid.Row="0" Source="{Binding PreviewImage}" Stretch="Fill" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="2"/>
  165. <TextBlock Grid.Row="1" FontSize="12" Foreground="{Binding Color,Converter={extensions:SKColorToBrushConverter}}" Text="{Binding Number, Mode=OneWay}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="2"/>
  166. </Grid>
  167. </Border>
  168. <ControlTemplate.Triggers>
  169. <Trigger Property="IsMouseOver" Value="True">
  170. <Setter TargetName="FrameBorder" Property="BorderBrush" Value="DeepSkyBlue"/>
  171. <Setter TargetName="FrameBorder" Property="BorderThickness" Value="2"/>
  172. </Trigger>
  173. <DataTrigger Binding="{Binding IsSelected}" Value="True">
  174. <Setter TargetName="FrameBorder" Property="BorderBrush" Value="DeepSkyBlue"/>
  175. <Setter TargetName="FrameBorder" Property="BorderThickness" Value="2"/>
  176. </DataTrigger>
  177. </ControlTemplate.Triggers>
  178. </ControlTemplate>
  179. </Button.Template>
  180. </Button>
  181. </DataTemplate>
  182. </ItemsControl.Resources>
  183. </ItemsControl>
  184. </ScrollViewer>
  185. </Border>
  186. <Slider x:Name="progressSlider" Grid.Row="1" Grid.Column="0" Value="0" VerticalAlignment="Center" Margin="0" Background="#1F1F1F" ValueChanged="progressSlider_ValueChanged"/>
  187. </Grid>
  188. <Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Background="#1F1F1F">
  189. <Grid.ColumnDefinitions>
  190. <ColumnDefinition Width="Auto"/>
  191. <ColumnDefinition Width="*"/>
  192. <ColumnDefinition Width="Auto"/>
  193. </Grid.ColumnDefinitions>
  194. <StackPanel x:Name="panelVideo" Grid.Row="1" Grid.Column="0" Margin="2" Orientation="Horizontal" HorizontalAlignment="Left">
  195. <Button Focusable="False" x:Name="Play" ToolTip="播放" Margin="2" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent" BorderThickness="0" Width="40" Click="OnPlayClick">
  196. <Image HorizontalAlignment="Center" Source="/Resources/Images/Play2.png" Stretch="Fill" />
  197. </Button>
  198. <Button Focusable="False" x:Name="Pause" ToolTip="暂停" Margin="2" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent" BorderThickness="0" Width="40" Click="OnPauseClick" Visibility="Collapsed">
  199. <Image HorizontalAlignment="Center" Source="/Resources/Images/Pause.png" Stretch="Fill" />
  200. </Button>
  201. <Button Focusable="False" x:Name="PreviousFrame" ToolTip="上一帧" Margin="2" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent" BorderThickness="0" Width="40" Click="OnPreviousFrameClick">
  202. <Image HorizontalAlignment="Center" Source="/Resources/Images/Previous.png" Stretch="Fill" />
  203. </Button>
  204. <Button Focusable="False" x:Name="NextFrame" ToolTip="下一帧" Margin="2" VerticalAlignment="Center" HorizontalAlignment="Right" Background="Transparent" BorderThickness="0" Width="40" Click="OnNextFrameClick">
  205. <Image Source="/Resources/Images/Next.png" Stretch="Fill" />
  206. </Button>
  207. <Button Focusable="False" x:Name="PreviousLabelFrame" ToolTip="上一标注帧" Margin="2" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent" BorderThickness="0" Width="40" Click="OnPreviousLabelFrameClick">
  208. <Image HorizontalAlignment="Center" Source="/Resources/Images/Previous2.png" Stretch="Fill" />
  209. </Button>
  210. <Button Focusable="False" x:Name="NextLabelFrame" ToolTip="下一标注帧" Margin="2" VerticalAlignment="Center" HorizontalAlignment="Right" Background="Transparent" BorderThickness="0" Width="40" Click="OnNextLabelFrameClick">
  211. <Image Source="/Resources/Images/Next2.png" Stretch="Fill" />
  212. </Button>
  213. </StackPanel>
  214. <StackPanel x:Name="panelFrame" Grid.Row="1" Grid.Column="1" Margin="2" Orientation="Horizontal" HorizontalAlignment="Center">
  215. <TextBlock Text="当前帧:" Margin="6" FontSize="12" Foreground="White" VerticalAlignment="Center" IsHitTestVisible="False"/>
  216. <TextBlock x:Name="CurrentFrameIndex" Foreground="White" VerticalAlignment="Center" IsHitTestVisible="False" />
  217. <TextBlock Text="/" Foreground="White" VerticalAlignment="Center" IsHitTestVisible="False"/>
  218. <TextBlock x:Name="TotalFrameCount" Foreground="White" VerticalAlignment="Center" IsHitTestVisible="False"/>
  219. <TextBlock Text="已标注:" Margin="6" FontSize="12" Foreground="White" VerticalAlignment="Center" IsHitTestVisible="False"/>
  220. <TextBlock x:Name="LabeledFrameCount" Margin="0,0,6,0" Foreground="White" VerticalAlignment="Center" IsHitTestVisible="False"/>
  221. <TextBlock Text="跳转至第" FontSize="12" Foreground="White" VerticalAlignment="Center"/>
  222. <TextBox x:Name="FrameIndexTextBox" Height="18" FontSize="12" VerticalContentAlignment="Center" Padding="0" Margin="2,0" Width="30" HorizontalContentAlignment="Center"
  223. PreviewKeyDown="FrameIndexTextBox_PreviewKeyDown"/>
  224. <TextBlock Text="帧" Margin="0,0,6,0" FontSize="12" Foreground="White" VerticalAlignment="Center"/>
  225. </StackPanel>
  226. <StackPanel Grid.Row="1" Grid.Column="2" Margin="2" Orientation="Horizontal" HorizontalAlignment="Right" Visibility="Collapsed">
  227. <CheckBox x:Name="ShowAllRoi" Margin="2,0" Content="显示所有ROI" IsChecked="{Binding IsShowAllRoi}" Click="ShowAllRoi_Click" FontSize="12" Foreground="White"/>
  228. <CheckBox x:Name="HideRoi" Margin="4,0" Content="隐藏ROI" IsChecked="{Binding IsHideRoi}" Click="HideRoi_Click" FontSize="12" Foreground="White"/>
  229. <!--<Button Focusable="False" x:Name="PreviousImage" ToolTip="上一页" VerticalAlignment="Center" Background="Transparent" BorderThickness="0" Click="OnPreviousImageClick">
  230. <Image HorizontalAlignment="Center" Source="/Resources/Images/Previous3.png" />
  231. </Button>
  232. <Button Focusable="False" x:Name="NextImage" ToolTip="下一页" VerticalAlignment="Center" Background="Transparent" BorderThickness="0" Click="OnNextImageClick">
  233. <Image HorizontalAlignment="Center" Source="/Resources/Images/Next3.png" />
  234. </Button>-->
  235. </StackPanel>
  236. </Grid>
  237. </Grid>
  238. <ScrollViewer Grid.Row="1" Grid.Column="2" VerticalScrollBarVisibility="Auto">
  239. <StackPanel>
  240. <!--<GroupBox Margin="4" MinHeight="64" Header="图像标签" Foreground="White" BorderBrush="Gray" BorderThickness="1" >
  241. <StackPanel VerticalAlignment="Center">
  242. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" x:Name="CombinationTagNameTextBox" TextWrapping="Wrap"/>
  243. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" x:Name="CombinationTagIdTextBox" TextWrapping="Wrap"/>
  244. </StackPanel>
  245. </GroupBox>-->
  246. <GroupBox Margin="2" MinHeight="64" Header="标注人员" Foreground="White" BorderBrush="Gray" BorderThickness="0.5" >
  247. <StackPanel VerticalAlignment="Stretch">
  248. <ListBox x:Name="LabelerList" FontSize="14" BorderThickness="0" DisplayMemberPath="Labeler.Name" ItemContainerStyle="{StaticResource LabelDataGroupConclusionItemStyle}"
  249. PreviewMouseLeftButtonDown="OnLabelerMouseLeftButtonDownAsync">
  250. <ListBox.ItemsPanel >
  251. <ItemsPanelTemplate>
  252. <WrapPanel Orientation="Horizontal" />
  253. </ItemsPanelTemplate>
  254. </ListBox.ItemsPanel>
  255. </ListBox>
  256. </StackPanel>
  257. </GroupBox>
  258. <GroupBox Margin="2" MinHeight="64" Header="图像信息" Foreground="White" BorderBrush="Gray" BorderThickness="0.5" >
  259. <StackPanel Margin="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
  260. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" x:Name="ImageNameTextBox" Margin="2" HorizontalAlignment="Left" TextWrapping="Wrap"/>
  261. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" x:Name="ImageIdTextBox" Margin="2" HorizontalAlignment="Left" TextWrapping="Wrap"/>
  262. </StackPanel>
  263. </GroupBox>
  264. <GroupBox Margin="2" MinHeight="64" Header="标注结果" Foreground="White" BorderBrush="Gray" BorderThickness="0.5" >
  265. <ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
  266. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  267. <ItemsControl x:Name="Conclusions">
  268. <!--<ItemsControl.ItemsPanel>
  269. <ItemsPanelTemplate>
  270. <WrapPanel>
  271. </WrapPanel>
  272. </ItemsPanelTemplate>
  273. </ItemsControl.ItemsPanel>-->
  274. <ItemsControl.Resources>
  275. <DataTemplate DataType="{x:Type model:LabelConclusion}">
  276. <WrapPanel Margin="2" Orientation="Horizontal" PreviewMouseLeftButtonDown="labelerClickTest" Cursor="Hand">
  277. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding Title}" />
  278. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding Unit}" />
  279. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding Content}" />
  280. </WrapPanel>
  281. </DataTemplate>
  282. </ItemsControl.Resources>
  283. </ItemsControl>
  284. </ScrollViewer>
  285. </GroupBox>
  286. <GroupBox Margin="2" x:Name="ReviewInfoGroup" MinHeight="64" Header="审核结果" Foreground="White" BorderBrush="Gray" BorderThickness="0.5" >
  287. <ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
  288. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  289. <ItemsControl x:Name="ReviewInfoList">
  290. <!--<ItemsControl.ItemsPanel>
  291. <ItemsPanelTemplate>
  292. <WrapPanel>
  293. </WrapPanel>
  294. </ItemsPanelTemplate>
  295. </ItemsControl.ItemsPanel>-->
  296. <ItemsControl.Resources>
  297. <DataTemplate DataType="{x:Type model:ReviewerInfo}">
  298. <StackPanel Margin="2" Orientation="Vertical">
  299. <GroupBox x:Name="ReviewerGroup" Header="{Binding}" BorderThickness="0.5">
  300. <GroupBox.HeaderTemplate>
  301. <DataTemplate>
  302. <StackPanel Orientation="Horizontal">
  303. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Text="{Binding Reviewer.Name}" Margin="2" VerticalAlignment="Stretch" FontWeight="Bold"/>
  304. </StackPanel>
  305. </DataTemplate>
  306. </GroupBox.HeaderTemplate>
  307. <ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
  308. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  309. <Grid>
  310. <Grid.RowDefinitions>
  311. <RowDefinition Height="Auto"/>
  312. <RowDefinition Height="*"/>
  313. </Grid.RowDefinitions>
  314. <StackPanel Grid.Row="0" Orientation="Horizontal">
  315. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="审核通过" Foreground="Green" Visibility="{Binding IsPassed, Converter={extensions:BoolToVisibilityConverter}}" TextWrapping="Wrap"/>
  316. </StackPanel>
  317. <StackPanel Grid.Row="1" Orientation="Vertical">
  318. <ItemsControl x:Name="Results" ItemsSource="{Binding Results}">
  319. <!--<ItemsControl.ItemsPanel>
  320. <ItemsPanelTemplate>
  321. <WrapPanel>
  322. </WrapPanel>
  323. </ItemsPanelTemplate>
  324. </ItemsControl.ItemsPanel>-->
  325. <ItemsControl.Resources>
  326. <DataTemplate DataType="{x:Type model:SingleReviewedResult}">
  327. <WrapPanel Margin="2" Orientation="Horizontal">
  328. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding Title}" TextWrapping="Wrap"/>
  329. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding ReviewResult}" Foreground="Red" TextWrapping="Wrap"/>
  330. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding ReviewComment}" Foreground="Orange" TextWrapping="Wrap"/>
  331. </WrapPanel>
  332. </DataTemplate>
  333. </ItemsControl.Resources>
  334. </ItemsControl>
  335. </StackPanel>
  336. </Grid>
  337. </ScrollViewer>
  338. </GroupBox>
  339. </StackPanel>
  340. </DataTemplate>
  341. </ItemsControl.Resources>
  342. </ItemsControl>
  343. </ScrollViewer>
  344. </GroupBox>
  345. <GroupBox Margin="2" x:Name="RelabelInfoGroup" MinHeight="64" Header="历史结果" Foreground="White" BorderBrush="Gray" BorderThickness="0.5">
  346. <ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
  347. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  348. <ItemsControl x:Name="RelabelInfoList">
  349. <!--<ItemsControl.ItemsPanel>
  350. <ItemsPanelTemplate>
  351. <WrapPanel>
  352. </WrapPanel>
  353. </ItemsPanelTemplate>
  354. </ItemsControl.ItemsPanel>-->
  355. <ItemsControl.Resources>
  356. <DataTemplate DataType="{x:Type viewmodel:LabeledUltrasoundFileInfoModel}">
  357. <StackPanel>
  358. <GroupBox Header="{Binding}" BorderThickness="0.5">
  359. <GroupBox.HeaderTemplate>
  360. <DataTemplate>
  361. <StackPanel Orientation="Horizontal">
  362. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Text="{Binding LabeledResultHeader}" Margin="2" VerticalAlignment="Center"/>
  363. <Button Focusable="False" Click="OnRelabelResultClick">
  364. <Button.Template>
  365. <ControlTemplate TargetType="{x:Type Button}">
  366. <Border x:Name="ButtonBorder" CornerRadius="2">
  367. <Image Source="Resources/Images/Image.png" Width="20" Height="20"/>
  368. </Border>
  369. <ControlTemplate.Triggers>
  370. <Trigger Property="IsMouseOver" Value="True">
  371. <Setter TargetName="ButtonBorder" Property="BorderThickness" Value="1"/>
  372. <Setter TargetName="ButtonBorder" Property="BorderBrush" Value="Gray"/>
  373. </Trigger>
  374. <DataTrigger Binding="{Binding IsSelected}" Value="True">
  375. <Setter TargetName="ButtonBorder" Property="BorderThickness" Value="2"/>
  376. <Setter TargetName="ButtonBorder" Property="BorderBrush" Value="Yellow"/>
  377. </DataTrigger>
  378. </ControlTemplate.Triggers>
  379. </ControlTemplate>
  380. </Button.Template>
  381. </Button>
  382. </StackPanel>
  383. </DataTemplate>
  384. </GroupBox.HeaderTemplate>
  385. <ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
  386. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  387. <ItemsControl ItemsSource="{Binding LabelConclusions}">
  388. <!--<ItemsControl.ItemsPanel>
  389. <ItemsPanelTemplate>
  390. <WrapPanel>
  391. </WrapPanel>
  392. </ItemsPanelTemplate>
  393. </ItemsControl.ItemsPanel>-->
  394. <ItemsControl.Resources>
  395. <DataTemplate DataType="{x:Type model:LabelConclusion}">
  396. <WrapPanel Margin="2" Orientation="Horizontal">
  397. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding Title}" TextWrapping="Wrap"/>
  398. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding Unit}" TextWrapping="Wrap"/>
  399. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding Content}" TextWrapping="Wrap"/>
  400. </WrapPanel>
  401. </DataTemplate>
  402. </ItemsControl.Resources>
  403. </ItemsControl>
  404. </ScrollViewer>
  405. </GroupBox>
  406. <GroupBox Margin="2" Header="{Binding}" BorderThickness="0.5" Visibility="{Binding HasReviewedResult, Converter={extensions:BoolToVisibilityConverter}}">
  407. <GroupBox.HeaderTemplate>
  408. <DataTemplate>
  409. <StackPanel Orientation="Horizontal">
  410. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Text="{Binding ReviewedResultHeader}" Margin="2" VerticalAlignment="Center"/>
  411. </StackPanel>
  412. </DataTemplate>
  413. </GroupBox.HeaderTemplate>
  414. <ItemsControl ItemsSource="{Binding ReviewerInfos}">
  415. <!--<ItemsControl.ItemsPanel>
  416. <ItemsPanelTemplate>
  417. <WrapPanel>
  418. </WrapPanel>
  419. </ItemsPanelTemplate>
  420. </ItemsControl.ItemsPanel>-->
  421. <ItemsControl.Resources>
  422. <DataTemplate DataType="{x:Type model:ReviewerInfo}">
  423. <StackPanel Margin="2" Orientation="Vertical">
  424. <GroupBox Header="{Binding}" BorderThickness="0.5">
  425. <GroupBox.HeaderTemplate>
  426. <DataTemplate>
  427. <StackPanel Orientation="Horizontal">
  428. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Text="{Binding Reviewer.Name}" Margin="2" VerticalAlignment="Stretch" FontWeight="Bold"/>
  429. </StackPanel>
  430. </DataTemplate>
  431. </GroupBox.HeaderTemplate>
  432. <ScrollViewer PanningMode="Both" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
  433. HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  434. <Grid>
  435. <Grid.RowDefinitions>
  436. <RowDefinition Height="Auto"/>
  437. <RowDefinition Height="*"/>
  438. </Grid.RowDefinitions>
  439. <StackPanel Grid.Row="0" Orientation="Horizontal">
  440. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="审核通过" Foreground="Green" Visibility="{Binding IsPassed, Converter={extensions:BoolToVisibilityConverter}}" TextWrapping="Wrap"/>
  441. </StackPanel>
  442. <StackPanel Grid.Row="1" Orientation="Vertical">
  443. <ItemsControl ItemsSource="{Binding Results}">
  444. <!--<ItemsControl.ItemsPanel>
  445. <ItemsPanelTemplate>
  446. <WrapPanel>
  447. </WrapPanel>
  448. </ItemsPanelTemplate>
  449. </ItemsControl.ItemsPanel>-->
  450. <ItemsControl.Resources>
  451. <DataTemplate DataType="{x:Type model:SingleReviewedResult}">
  452. <WrapPanel Margin="2" Orientation="Horizontal">
  453. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding Title}" TextWrapping="Wrap"/>
  454. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding ReviewResult}" Foreground="Red" TextWrapping="Wrap"/>
  455. <TextBox Style="{StaticResource ReadOnlyTextBoxStyle}" Margin="2,0" Text="{Binding ReviewComment}" Foreground="Orange" TextWrapping="Wrap"/>
  456. </WrapPanel>
  457. </DataTemplate>
  458. </ItemsControl.Resources>
  459. </ItemsControl>
  460. </StackPanel>
  461. </Grid>
  462. </ScrollViewer>
  463. </GroupBox>
  464. </StackPanel>
  465. </DataTemplate>
  466. </ItemsControl.Resources>
  467. </ItemsControl>
  468. </GroupBox>
  469. <GroupBox Margin="2" Header="{Binding}" BorderThickness="0.5" Visibility="{Binding HasDeveloperItem, Converter={extensions:BoolToVisibilityConverter}}">
  470. <GroupBox.HeaderTemplate>
  471. <DataTemplate>
  472. <StackPanel Orientation="Horizontal">
  473. <TextBlock Text="{Binding DeveloperItemHeader}" Margin="2" VerticalAlignment="Center"/>
  474. </StackPanel>
  475. </DataTemplate>
  476. </GroupBox.HeaderTemplate>
  477. <WrapPanel Margin="2" Orientation="Horizontal">
  478. <TextBlock Margin="2,0" Text="{Binding QuestionedState}" TextWrapping="Wrap"/>
  479. <TextBlock Margin="5,0" Text="{Binding ConfirmedState}" TextWrapping="Wrap"/>
  480. </WrapPanel>
  481. </GroupBox>
  482. </StackPanel>
  483. </DataTemplate>
  484. </ItemsControl.Resources>
  485. </ItemsControl>
  486. </ScrollViewer>
  487. </GroupBox>
  488. <GroupBox x:Name="QueryReason" DockPanel.Dock="Bottom" Margin="2" MinHeight="64" Header="质疑建议" Foreground="White" BorderBrush="Gray" BorderThickness="0.5" >
  489. <TextBox Grid.Row="1" x:Name="QuerySuggest" Margin="2" VerticalContentAlignment="Top" Text="{Binding DeveloperQuestionedItem.Comment, UpdateSourceTrigger=PropertyChanged}" LostFocus="SaveQueryReason"
  490. TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" Height="60"/>
  491. </GroupBox>
  492. <WrapPanel VerticalAlignment="Center" Orientation="Horizontal" Margin="2,5,0,0">
  493. <TextBlock Foreground="White" Text="质疑状态:" VerticalAlignment="Center" HorizontalAlignment="Left" />
  494. <TextBlock x:Name="txtQuestionedState" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,0,5,0" />
  495. <Button x:Name="btnQuestioned" Content="质疑" HorizontalAlignment="Right" Margin="2,0" Style="{StaticResource btn-danger}" Click="OnQuestionedFileClick"/>
  496. <Button x:Name="btnWithdrawalQuestioned" Content="撤销质疑" HorizontalAlignment="Right" Margin="2,0" Style="{StaticResource btn-warning}" Click="OnWithdrawalQuestionedFileClick"/>
  497. </WrapPanel>
  498. <WrapPanel VerticalAlignment="Center" Orientation="Horizontal" Margin="2,5,0,0">
  499. <TextBlock Foreground="White" Text="确认状态:" VerticalAlignment="Center" HorizontalAlignment="Left" />
  500. <TextBlock x:Name="txtConfirmedState" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Left" />
  501. </WrapPanel>
  502. </StackPanel>
  503. </ScrollViewer>
  504. <local:WaitingSpinner Grid.Column="0" Grid.ColumnSpan="2" x:Name="Waiting" />
  505. </Grid>
  506. </Window>