MainWindow.xaml 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <Window
  2. x:Class="ShakerControl.MainWindow"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  6. xmlns:hc="https://handyorg.github.io/handycontrol"
  7. xmlns:local="clr-namespace:ShakerControl"
  8. xmlns:mark="clr-namespace:AppResource.MarkupExtension;assembly=AppResource"
  9. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  10. xmlns:model="clr-namespace:Shaker.Model;assembly=Shaker.Model"
  11. xmlns:view="clr-namespace:ShakerControl.View"
  12. xmlns:vm="clr-namespace:ShakerControl.ViewModel"
  13. Title="{Binding Title}"
  14. Width="800"
  15. Height="450"
  16. d:DataContext="{d:DesignInstance {x:Type vm:MainWindowViewModel}}"
  17. DataContext="{Binding Source={StaticResource VM}, Path=Data}"
  18. FontSize="{StaticResource ItemFontSize}"
  19. Foreground="{StaticResource ForeColor}"
  20. mc:Ignorable="d">
  21. <Grid>
  22. <Grid.Style>
  23. <Style TargetType="Grid">
  24. <Setter Property="IsEnabled">
  25. <Setter.Value>
  26. <MultiBinding
  27. Converter="{StaticResource MainWindowEnabledConverter}"
  28. ConverterParameter="1"
  29. Mode="OneWay">
  30. <Binding
  31. Mode="OneWay"
  32. Path="Data.IsOpen"
  33. Source="{StaticResource Prompt}" />
  34. </MultiBinding>
  35. </Setter.Value>
  36. </Setter>
  37. </Style>
  38. </Grid.Style>
  39. <Grid.RowDefinitions>
  40. <RowDefinition Height="auto" />
  41. <RowDefinition />
  42. </Grid.RowDefinitions>
  43. <Menu
  44. Grid.Row="0"
  45. VerticalAlignment="Center"
  46. VerticalContentAlignment="Center"
  47. FontSize="16">
  48. <MenuItem VerticalContentAlignment="Center" Header="{DynamicResource MenuFile}">
  49. <MenuItem Header="{DynamicResource MenuSaveConfig}" IsEnabled="{Binding Source={x:Static vm:DeviceMangerViewModel.Default}, Path=CurrentDevice, Converter={StaticResource Object2BooleanConverter}}" />
  50. <MenuItem Header="{DynamicResource MenuLoadConfig}" IsEnabled="{Binding Source={x:Static vm:DeviceMangerViewModel.Default}, Path=CurrentDevice, Converter={StaticResource Object2BooleanConverter}}" />
  51. <MenuItem Header="{DynamicResource MenuSaveSweepConfig}" Visibility="{Binding SelectedTest, Converter={StaticResource Boolean2VisibilityConverter}}">
  52. <MenuItem.Style>
  53. <Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
  54. <Style.Triggers>
  55. <DataTrigger Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Sine}">
  56. <Setter Property="IsEnabled" Value="True" />
  57. </DataTrigger>
  58. <DataTrigger Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Random}">
  59. <Setter Property="IsEnabled" Value="False" />
  60. </DataTrigger>
  61. </Style.Triggers>
  62. </Style>
  63. </MenuItem.Style>
  64. </MenuItem>
  65. <MenuItem Header="{DynamicResource MenuLoadSweepConfig}" Visibility="{Binding SelectedTest, Converter={StaticResource Boolean2VisibilityConverter}}">
  66. <MenuItem.Style>
  67. <Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
  68. <Style.Triggers>
  69. <DataTrigger Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Sine}">
  70. <Setter Property="IsEnabled" Value="True" />
  71. </DataTrigger>
  72. <DataTrigger Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Random}">
  73. <Setter Property="IsEnabled" Value="False" />
  74. </DataTrigger>
  75. </Style.Triggers>
  76. </Style>
  77. </MenuItem.Style>
  78. </MenuItem>
  79. <Separator />
  80. <MenuItem Command="{Binding ExitCommand}" Header="{DynamicResource MenuExit}" />
  81. </MenuItem>
  82. <MenuItem Header="{DynamicResource MenuDevice}">
  83. <MenuItem
  84. Command="{Binding Source={StaticResource DeviceManger}, Path=Data.DeviceMangerCommand}"
  85. Header="{DynamicResource MenuManger}"
  86. IsEnabled="{Binding Source={StaticResource DeviceManger}, Path=Data.CurrentDevice, Converter={StaticResource Object2BooleanReConverter}}" />
  87. <MenuItem
  88. Command="{Binding Source={StaticResource DeviceManger}, Path=Data.DisConnectDeviceCommand}"
  89. Header="{DynamicResource MenuDisConnect}"
  90. IsEnabled="{Binding Source={StaticResource DeviceManger}, Path=Data.CurrentDevice, Converter={StaticResource Object2BooleanConverter}}" />
  91. <MenuItem
  92. Command="{Binding Source={StaticResource VM}, Path=Data.DeviceConfigCommand}"
  93. Header="{DynamicResource MenuDeviceConfig}"
  94. IsEnabled="{Binding Source={StaticResource DeviceManger}, Path=Data.CurrentDevice, Converter={StaticResource Object2BooleanConverter}}" />
  95. <MenuItem
  96. Command="{Binding Source={StaticResource VM}, Path=Data.OilSourceControlCommand}"
  97. Header="{DynamicResource OilSourceControl}"
  98. IsEnabled="{Binding Source={StaticResource DeviceManger}, Path=Data.CurrentDevice, Converter={StaticResource Object2BooleanConverter}}" />
  99. </MenuItem>
  100. <MenuItem Header="{DynamicResource MenuTest}" IsEnabled="{Binding Source={StaticResource DeviceManger}, Path=Data.CurrentDevice, Converter={StaticResource Object2BooleanConverter}}">
  101. <MenuItem Header="{DynamicResource MenuSine}">
  102. <MenuItem.Style>
  103. <Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
  104. <Style.Triggers>
  105. <MultiDataTrigger>
  106. <MultiDataTrigger.Conditions>
  107. <Condition Binding="{Binding Path=SelectedTest}" Value="True" />
  108. <Condition Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Sine}" />
  109. </MultiDataTrigger.Conditions>
  110. <MultiDataTrigger.Setters>
  111. <Setter Property="IsEnabled" Value="False" />
  112. </MultiDataTrigger.Setters>
  113. </MultiDataTrigger>
  114. <MultiDataTrigger>
  115. <MultiDataTrigger.Conditions>
  116. <Condition Binding="{Binding Path=SelectedTest}" Value="True" />
  117. <Condition Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Random}" />
  118. </MultiDataTrigger.Conditions>
  119. <MultiDataTrigger.Setters>
  120. <Setter Property="IsEnabled" Value="True" />
  121. </MultiDataTrigger.Setters>
  122. </MultiDataTrigger>
  123. </Style.Triggers>
  124. </Style>
  125. </MenuItem.Style>
  126. <hc:Interaction.Triggers>
  127. <hc:EventTrigger EventName="Click">
  128. <hc:SetPropertyAction
  129. PropertyName="TestType"
  130. PropertyValue="{x:Static model:TestType.Sine}"
  131. TargetObject="{Binding Source={StaticResource VM}, Path=Data}" />
  132. <hc:SetPropertyAction
  133. PropertyName="SelectedTest"
  134. PropertyValue="True"
  135. TargetObject="{Binding Source={StaticResource VM}, Path=Data}" />
  136. </hc:EventTrigger>
  137. </hc:Interaction.Triggers>
  138. </MenuItem>
  139. <MenuItem Header="{DynamicResource MenuRandom}">
  140. <MenuItem.Style>
  141. <Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
  142. <Style.Triggers>
  143. <MultiDataTrigger>
  144. <MultiDataTrigger.Conditions>
  145. <Condition Binding="{Binding Path=SelectedTest}" Value="True" />
  146. <Condition Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Sine}" />
  147. </MultiDataTrigger.Conditions>
  148. <MultiDataTrigger.Setters>
  149. <Setter Property="IsEnabled" Value="True" />
  150. </MultiDataTrigger.Setters>
  151. </MultiDataTrigger>
  152. <MultiDataTrigger>
  153. <MultiDataTrigger.Conditions>
  154. <Condition Binding="{Binding Path=SelectedTest}" Value="True" />
  155. <Condition Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Random}" />
  156. </MultiDataTrigger.Conditions>
  157. <MultiDataTrigger.Setters>
  158. <Setter Property="IsEnabled" Value="False" />
  159. </MultiDataTrigger.Setters>
  160. </MultiDataTrigger>
  161. </Style.Triggers>
  162. </Style>
  163. </MenuItem.Style>
  164. <hc:Interaction.Triggers>
  165. <hc:EventTrigger EventName="Click">
  166. <hc:SetPropertyAction
  167. PropertyName="TestType"
  168. PropertyValue="{x:Static model:TestType.Random}"
  169. TargetObject="{Binding Source={StaticResource VM}, Path=Data}" />
  170. <hc:SetPropertyAction
  171. PropertyName="SelectedTest"
  172. PropertyValue="True"
  173. TargetObject="{Binding Source={StaticResource VM}, Path=Data}" />
  174. </hc:EventTrigger>
  175. </hc:Interaction.Triggers>
  176. </MenuItem>
  177. <Separator />
  178. <MenuItem Command="{Binding SignalPreviewCommand}" Header="{DynamicResource SignalPreview}" />
  179. <Separator />
  180. <MenuItem Header="{DynamicResource MenuExitTest}" IsEnabled="{Binding SelectedTest}">
  181. <hc:Interaction.Triggers>
  182. <hc:EventTrigger EventName="Click">
  183. <hc:SetPropertyAction
  184. PropertyName="SelectedTest"
  185. PropertyValue="False"
  186. TargetObject="{Binding Source={StaticResource VM}, Path=Data}" />
  187. </hc:EventTrigger>
  188. </hc:Interaction.Triggers>
  189. </MenuItem>
  190. </MenuItem>
  191. <MenuItem Header="{DynamicResource MenuTestConfig}" Visibility="{Binding SelectedTest, Converter={StaticResource Boolean2VisibilityConverter}}">
  192. <MenuItem Command="{Binding SweepConfigCommand}" Header="{DynamicResource MenuSineTestConfig}">
  193. <MenuItem.Style>
  194. <Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
  195. <Style.Triggers>
  196. <DataTrigger Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Sine}">
  197. <Setter Property="IsEnabled" Value="True" />
  198. </DataTrigger>
  199. <DataTrigger Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Random}">
  200. <Setter Property="IsEnabled" Value="False" />
  201. </DataTrigger>
  202. </Style.Triggers>
  203. </Style>
  204. </MenuItem.Style>
  205. </MenuItem>
  206. <MenuItem Header="{DynamicResource MenuRandomTestConfig}">
  207. <MenuItem.Style>
  208. <Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
  209. <Style.Triggers>
  210. <DataTrigger Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Sine}">
  211. <Setter Property="IsEnabled" Value="False" />
  212. </DataTrigger>
  213. <DataTrigger Binding="{Binding Path=TestType}" Value="{x:Static model:TestType.Random}">
  214. <Setter Property="IsEnabled" Value="True" />
  215. </DataTrigger>
  216. </Style.Triggers>
  217. </Style>
  218. </MenuItem.Style>
  219. </MenuItem>
  220. </MenuItem>
  221. <MenuItem Header="{DynamicResource MenuAbout}">
  222. <MenuItem Command="{Binding SettingCommand}" Header="{DynamicResource MenuSetting}" />
  223. <MenuItem Header="{DynamicResource MenuAbout}" />
  224. </MenuItem>
  225. </Menu>
  226. <ContentControl Grid.Row="1" />
  227. <hc:Drawer
  228. Grid.Row="0"
  229. Grid.RowSpan="2"
  230. DataContext="{Binding Source={StaticResource Prompt}, Path=Data}"
  231. Dock="Top"
  232. IsCenter="True"
  233. IsOpen="{Binding IsOpen}"
  234. ShowMask="True">
  235. <Border
  236. Width="560"
  237. Height="340"
  238. Background="{StaticResource MainBrush}"
  239. BorderBrush="{StaticResource AuxiliaryBrush}"
  240. BorderThickness="1"
  241. CornerRadius="6">
  242. <Grid>
  243. <Grid.RowDefinitions>
  244. <RowDefinition Height="66" />
  245. <RowDefinition Height="2*" />
  246. <RowDefinition Height="*" />
  247. </Grid.RowDefinitions>
  248. <Border
  249. Grid.ColumnSpan="2"
  250. Background="{StaticResource EmbellishBrush}"
  251. CornerRadius="6,6,0,0">
  252. <TextBlock
  253. HorizontalAlignment="Center"
  254. VerticalAlignment="Center"
  255. FontSize="32"
  256. FontWeight="Bold"
  257. Foreground="{StaticResource MainBrush}"
  258. Text="{Binding Title}" />
  259. </Border>
  260. <StackPanel
  261. Grid.Row="1"
  262. HorizontalAlignment="Center"
  263. VerticalAlignment="Center"
  264. Orientation="Horizontal">
  265. <Viewbox
  266. Grid.Row="1"
  267. Grid.Column="0"
  268. Width="60"
  269. Height="60"
  270. HorizontalAlignment="Center"
  271. VerticalAlignment="Center"
  272. Visibility="{Binding IconVisibility}">
  273. <Path Data="{Binding IconGeometry, Mode=OneWay}" Fill="{Binding IconBrush}" />
  274. </Viewbox>
  275. <TextBlock
  276. Grid.Row="1"
  277. Grid.Column="1"
  278. MaxWidth="420"
  279. Margin="20"
  280. HorizontalAlignment="Left"
  281. VerticalAlignment="Center"
  282. FontSize="20"
  283. Text="{Binding Message}"
  284. TextWrapping="Wrap" />
  285. </StackPanel>
  286. <StackPanel
  287. Grid.Row="2"
  288. Grid.ColumnSpan="2"
  289. HorizontalAlignment="Center"
  290. VerticalAlignment="Center"
  291. Orientation="Horizontal">
  292. <Button
  293. Width="88"
  294. Height="38"
  295. hc:IconElement.Geometry="{StaticResource YesGeometry}"
  296. hc:IconElement.Height="20"
  297. hc:IconElement.Width="20"
  298. BorderBrush="Green"
  299. Command="{Binding YesCommand}"
  300. Content="{Binding YesText}"
  301. Cursor="Hand"
  302. FontSize="16"
  303. Foreground="Green"
  304. Style="{StaticResource HasIconButton}"
  305. ToolTip="{Binding YesText}"
  306. Visibility="{Binding YesVisibility}" />
  307. <Button
  308. Width="88"
  309. Height="38"
  310. Margin="100,0,0,0"
  311. hc:IconElement.Geometry="{StaticResource NoGeometry}"
  312. hc:IconElement.Height="20"
  313. hc:IconElement.Width="20"
  314. BorderBrush="Red"
  315. Command="{Binding NoCommand}"
  316. Content="{Binding NoText}"
  317. Cursor="Hand"
  318. FontSize="16"
  319. Foreground="Red"
  320. Style="{StaticResource HasIconButton}"
  321. ToolTip="{Binding NoText}"
  322. Visibility="{Binding NoVisibility}" />
  323. </StackPanel>
  324. </Grid>
  325. </Border>
  326. </hc:Drawer>
  327. </Grid>
  328. </Window>