OutLineControl.xaml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. <UserControl
  2. x:Class="PDF_Office.Views.BOTA.OutLineControl"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:bota="clr-namespace:PDF_Office.ViewModels.BOTA"
  6. xmlns:customcontrol="clr-namespace:PDF_Office.CustomControl"
  7. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  8. xmlns:local="clr-namespace:PDF_Office.Views.BOTA"
  9. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  10. xmlns:model="clr-namespace:PDF_Office.Model.BOTA"
  11. x:Name="ttt"
  12. d:DataContext="{d:DesignInstance Type=bota:OutLineControlViewModel}"
  13. mc:Ignorable="d">
  14. <UserControl.Resources>
  15. <ResourceDictionary>
  16. <ResourceDictionary.MergedDictionaries>
  17. <ResourceDictionary Source="pack://application:,,,/PDF Office;component/Styles/OutLineItemStyle.xaml" />
  18. </ResourceDictionary.MergedDictionaries>
  19. </ResourceDictionary>
  20. </UserControl.Resources>
  21. <Grid Background="Transparent">
  22. <Grid.RowDefinitions>
  23. <RowDefinition Height="40" />
  24. <RowDefinition />
  25. </Grid.RowDefinitions>
  26. <Grid x:Name="Header">
  27. <TextBlock
  28. x:Name="TxtTitle"
  29. Margin="12,0,0,0"
  30. HorizontalAlignment="Left"
  31. VerticalAlignment="Center"
  32. FontSize="18"
  33. FontWeight="SemiBold"
  34. Text="Outline" />
  35. <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
  36. <customcontrol:PathButton
  37. x:Name="BtnAdd"
  38. Width="32"
  39. Height="32"
  40. Click="BtnAdd_Click"
  41. Icon="{StaticResource Ic_AddButtonPath}"
  42. IconFill="#616469"
  43. IconHeight="16"
  44. IconWidth="16"
  45. IconMouseOver="{StaticResource Ic_AddButtonPath}"
  46. IconMouseOverFill="#616469"
  47. IconPress="{StaticResource Ic_AddButtonPath}"
  48. IconPressFill="#616469"
  49. CornerRadius="4"
  50. HorizontalContentAlignment="Center"
  51. MouseOverBackground="{StaticResource color.item-state.hov.bg}"
  52. MouseDownBackground="{StaticResource color.item-state.sel.bg.lv3}"
  53. MouseDownBorderBrush="{StaticResource color.item-state.sel.border.lv3}"
  54. />
  55. <customcontrol:PathButton
  56. x:Name="BtnMore"
  57. Width="32"
  58. Height="32"
  59. Click="BtnMore_Click"
  60. Icon="{StaticResource Ic_MoreButtonPath}"
  61. IconFill="#616469"
  62. IconHeight="16"
  63. IconWidth="16"
  64. CornerRadius="4"
  65. IconMouseOver="{StaticResource Ic_MoreButtonPath}"
  66. IconMouseOverFill="#616469"
  67. IconPress="{StaticResource Ic_MoreButtonPath}"
  68. IconPressFill="#616469"
  69. HorizontalContentAlignment="Center"
  70. MouseOverBackground="{StaticResource color.item-state.hov.bg}"
  71. MouseDownBackground="{StaticResource color.item-state.sel.bg.lv3}"
  72. MouseDownBorderBrush="{StaticResource color.item-state.sel.border.lv3}">
  73. <customcontrol:PathButton.ContextMenu>
  74. <ContextMenu Name="MenuMore">
  75. <ContextMenu.ItemContainerStyle>
  76. <Style TargetType="MenuItem" BasedOn="{StaticResource GlobalMenuItem}">
  77. <Setter Property="Padding" Value="-25,7,-40,7" />
  78. <Setter Property="VerticalContentAlignment" Value="Center" />
  79. </Style>
  80. </ContextMenu.ItemContainerStyle>
  81. <MenuItem
  82. Name="MenuDeleteAll"
  83. Command="{Binding DeleteAllCommand}"
  84. Header="Delete All Outline" />
  85. <MenuItem
  86. Name="MenuExpandAll"
  87. Command="{Binding ExpandAllCommand}"
  88. CommandParameter="{Binding Outlinelist}"
  89. Header="一键展开" />
  90. <MenuItem
  91. Name="MenuCollapseAll"
  92. Command="{Binding CollapseAllCommand}"
  93. CommandParameter="{Binding Outlinelist}"
  94. Header="一键折叠" />
  95. </ContextMenu>
  96. </customcontrol:PathButton.ContextMenu>
  97. </customcontrol:PathButton>
  98. </StackPanel>
  99. </Grid>
  100. <StackPanel
  101. x:Name="FirstOulineLine"
  102. Margin="10,0"
  103. VerticalAlignment="Bottom"
  104. Orientation="Horizontal"
  105. Visibility="{Binding IsInsertHead, Converter={StaticResource BoolToVisible}}">
  106. <Ellipse
  107. Width="8"
  108. Height="8"
  109. HorizontalAlignment="Stretch"
  110. VerticalAlignment="Bottom"
  111. Fill="White"
  112. Stroke="#FF0078D7"
  113. StrokeThickness="1.5" />
  114. <Rectangle
  115. Width="{Binding ElementName=Header, Path=ActualWidth}"
  116. Height="1.5"
  117. Margin="-1,0,0,2"
  118. HorizontalAlignment="Stretch"
  119. VerticalAlignment="Bottom"
  120. Fill="#FF0078D7"
  121. StrokeDashArray="2" />
  122. </StackPanel>
  123. <Grid
  124. Grid.Row="1"
  125. DragLeave="Grid_DragLeave"
  126. DragOver="Grid_DragOver">
  127. <StackPanel
  128. x:Name="NoOutlineStackPanel"
  129. VerticalAlignment="Center"
  130. Visibility="{Binding Outlinelist.Count, Converter={StaticResource ListCountToVisible}}">
  131. <Image Source="pack://application:,,,/PDF Office;component/Resources/BOTA/no_outline.png" />
  132. <TextBlock
  133. Height="22"
  134. HorizontalAlignment="Center"
  135. FontFamily="Segoe UI"
  136. FontSize="14"
  137. Text="No outline found" />
  138. <TextBlock
  139. Width="168"
  140. HorizontalAlignment="Center"
  141. FontFamily="Segoe UI"
  142. FontSize="12"
  143. Foreground="#94989C"
  144. Text="Please right-click on the selected page and select Add Outline, or click the Add button on the upper right to create a outline."
  145. TextWrapping="Wrap" />
  146. </StackPanel>
  147. <TreeView
  148. x:Name="OutlineView"
  149. Grid.Row="1"
  150. AllowDrop="True"
  151. BorderThickness="0"
  152. Drop="OutlineView_Drop"
  153. ItemsSource="{Binding Outlinelist}"
  154. PreviewMouseDoubleClick="OutlineView_PreviewMouseDoubleClick"
  155. PreviewMouseLeftButtonUp="OutlineView_PreviewMouseLeftButtonUp"
  156. PreviewMouseMove="OutlineView_PreviewMouseMove"
  157. ScrollViewer.HorizontalScrollBarVisibility="Disabled"
  158. VirtualizingPanel.ScrollUnit="Pixel"
  159. Visibility="{Binding ElementName=NoOutlineStackPanel, Path=Visibility, Converter={StaticResource UnVisivleConvert}}">
  160. <TreeView.ItemTemplate>
  161. <HierarchicalDataTemplate DataType="{x:Type model:OutlineNode}" ItemsSource="{Binding Path=Chlidlist}">
  162. <Grid>
  163. <Grid.ContextMenu>
  164. <ContextMenu>
  165. <MenuItem
  166. x:Name="AddMenu"
  167. Click="AddMenu_Click"
  168. Header="添加条目" />
  169. <MenuItem
  170. x:Name="AddChlidMenu"
  171. Click="AddChlidMenu_Click"
  172. Header="添加子条目" />
  173. <MenuItem
  174. x:Name="AddParentMenu"
  175. Click="AddParentMenu_Click"
  176. Header="添加上一级条目"
  177. IsEnabled="{Binding CanAddParent}" />
  178. <MenuItem
  179. x:Name="DeleteMenu"
  180. Click="DeleteMenu_Click"
  181. Header="删除" />
  182. <MenuItem
  183. x:Name="RenameMenu"
  184. Click="RenameMenu_Click"
  185. Header="重命名" />
  186. <MenuItem
  187. x:Name="ChangeDestinationMenu"
  188. Click="ChangeDestinationMenu_Click"
  189. Header="更改目标位置" />
  190. <MenuItem
  191. x:Name="UpgradeMenu"
  192. Click="UpgradeMenu_Click"
  193. Header="升级"
  194. IsEnabled="{Binding CanUp}" />
  195. <MenuItem
  196. x:Name="DowngradeMenu"
  197. Click="DowngradeMenu_Click"
  198. Header="降级"
  199. IsEnabled="{Binding CanDown}" />
  200. </ContextMenu>
  201. </Grid.ContextMenu>
  202. <Grid x:Name="ContentPanel">
  203. <Grid.ToolTip>
  204. <!-- 圆角 https://wpf.2000things.com/2012/05/11/556-clipping-to-a-border-using-an-opacity-mask -->
  205. <ToolTip
  206. Width="320"
  207. Height="120"
  208. Closed="ToolTip_Closed"
  209. Opened="ToolTip_Opened"
  210. Style="{StaticResource ErrorRoundedTooltip}">
  211. <customcontrol:CustomImageControl
  212. Width="320"
  213. Height="120"
  214. HorizontalAlignment="Stretch"
  215. VerticalAlignment="Stretch" />
  216. </ToolTip>
  217. </Grid.ToolTip>
  218. <Grid.ColumnDefinitions>
  219. <ColumnDefinition />
  220. <ColumnDefinition Width="auto" />
  221. </Grid.ColumnDefinitions>
  222. <TextBlock
  223. x:Name="Content"
  224. VerticalAlignment="Center"
  225. Text="{Binding Outline.Title}"
  226. TextTrimming="CharacterEllipsis"
  227. Visibility="{Binding IsReName, Mode=TwoWay}" />
  228. <TextBlock
  229. x:Name="PageIndex"
  230. Grid.Column="1"
  231. HorizontalAlignment="Right"
  232. VerticalAlignment="Center"
  233. Text="{Binding PageIndex}" />
  234. </Grid>
  235. <StackPanel
  236. HorizontalAlignment="Stretch"
  237. Orientation="Horizontal"
  238. Visibility="{Binding IsInsertNextLayer, Converter={StaticResource BoolToVisible}}">
  239. <Ellipse
  240. Width="8"
  241. Height="8"
  242. Margin="0,0,0,0"
  243. VerticalAlignment="Bottom"
  244. Fill="White"
  245. Stroke="#FF0078D7"
  246. StrokeThickness="1.5" />
  247. <Line
  248. Margin="-1,0,0,2"
  249. HorizontalAlignment="Stretch"
  250. VerticalAlignment="Bottom"
  251. Stroke="#FF0078D7"
  252. StrokeDashArray="2"
  253. StrokeThickness="1.5"
  254. X1="0"
  255. X2="{Binding ElementName=ContentPanel, Path=ActualWidth}" />
  256. </StackPanel>
  257. <Grid
  258. x:Name="RenameGrid"
  259. LostFocus="RenameGrid_LostFocus"
  260. Visibility="{Binding ElementName=Content, Path=Visibility, Mode=TwoWay, Converter={StaticResource UnVisivleConvert}}">
  261. <TextBox
  262. x:Name="ReName"
  263. HorizontalAlignment="Left"
  264. VerticalAlignment="Center"
  265. IsVisibleChanged="ReName_IsVisibleChanged"
  266. Style="{StaticResource TextBoxStyleRadius}" />
  267. </Grid>
  268. </Grid>
  269. </HierarchicalDataTemplate>
  270. </TreeView.ItemTemplate>
  271. <TreeView.ItemContainerStyle>
  272. <Style BasedOn="{StaticResource OutLineItemStyle}" TargetType="TreeViewItem">
  273. <EventSetter Event="PreviewMouseLeftButtonUp" Handler="TreeViewItem_PreviewMouseLeftButtonUp" />
  274. <EventSetter Event="PreviewMouseLeftButtonDown" Handler="TreeViewItem_PreviewMouseLeftButtonDown" />
  275. </Style>
  276. </TreeView.ItemContainerStyle>
  277. </TreeView>
  278. </Grid>
  279. </Grid>
  280. </UserControl>