/Application/GUI/Controls/ViewDetails.xaml

http://yet-another-music-application.googlecode.com/ · XAML · 408 lines · 362 code · 10 blank · 36 comment · 0 complexity · 3599fd90953dc17d76b661539a1d532d MD5 · raw file

  1. <!--ViewDetails.xaml
  2. A modified ListView that looks extremely sexy.
  3. Features:
  4. Drag-n-Drop
  5. Column sort
  6. Column toggle
  7. Icons
  8. Strikethrough
  9. Active items
  10. Explorer-like look
  11. It also sports a convenient storage structure for use to
  12. import and export the configuration in order to allow for
  13. easy saving of the configuration between different sessions.
  14. = = = = = = = = = =
  15. This code is part of the Stoffi Music Player Project.
  16. Visit our website at: stoffiplayer.com
  17. This program is free software; you can redistribute it and/or
  18. modify it under the terms of the GNU General Public License
  19. as published by the Free Software Foundation; either version
  20. 3 of the License, or (at your option) any later version.
  21. See stoffiplayer.com/license for more information.
  22. -->
  23. <ListView x:Class="Stoffi.ViewDetails"
  24. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  25. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  26. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  27. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  28. mc:Ignorable="d"
  29. d:DesignHeight="300" d:DesignWidth="300"
  30. Loaded="ListView_Loaded">
  31. <ListView.Resources>
  32. <!-- Aero styles -->
  33. <Style x:Key="AeroRowStyle" TargetType="{x:Type ListViewItem}">
  34. <Setter Property="Background" Value="Transparent"/>
  35. <Setter Property="BorderBrush" Value="Transparent"/>
  36. <Setter Property="BorderThickness" Value="1"/>
  37. <Setter Property="Margin" Value="0,0,0,1"/>
  38. <Setter Property="Padding" Value="5,3,5,3"/>
  39. <Setter Property="VerticalContentAlignment" Value="Center"/>
  40. <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
  41. <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
  42. <Setter Property="Template">
  43. <Setter.Value>
  44. <ControlTemplate TargetType="{x:Type ListViewItem}">
  45. <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Margin="17,0,0,0" Padding="0"
  46. Background="{TemplateBinding Background}" CornerRadius="2" SnapsToDevicePixels="True" VerticalAlignment="Stretch">
  47. <Border x:Name="InnerBorder" BorderThickness="1" CornerRadius="1" VerticalAlignment="Stretch" Margin="0" Padding="0" SnapsToDevicePixels="True">
  48. <Grid VerticalAlignment="Stretch" Margin="0" SnapsToDevicePixels="True">
  49. <Grid.RowDefinitions>
  50. <RowDefinition MaxHeight="11"/>
  51. <RowDefinition/>
  52. </Grid.RowDefinitions>
  53. <!-- Presenter -->
  54. <GridViewRowPresenter Grid.RowSpan="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="-17,0,0,0" />
  55. <!-- Strike -->
  56. <Border Background="Black" VerticalAlignment="Bottom" Height="1" SnapsToDevicePixels="True" x:Name="Strikethrough" Visibility="Collapsed"/>
  57. </Grid>
  58. </Border>
  59. </Border>
  60. <ControlTemplate.Triggers>
  61. <DataTrigger Binding="{Binding Path=Strike}" Value="True">
  62. <Setter TargetName="Strikethrough" Property="Visibility" Value="Visible"/>
  63. </DataTrigger>
  64. <Trigger Property="IsMouseOver" Value="true">
  65. <Setter Property="Background">
  66. <Setter.Value>
  67. <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
  68. <GradientStop Color="#fffafbfd" Offset="0"/>
  69. <GradientStop Color="#ffebf4fd" Offset="1"/>
  70. </LinearGradientBrush>
  71. </Setter.Value>
  72. </Setter>
  73. <Setter Property="BorderBrush" Value="#ffb8d6fa"/>
  74. <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
  75. </Trigger>
  76. <Trigger Property="IsSelected" Value="true">
  77. <Setter Property="Background">
  78. <Setter.Value>
  79. <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
  80. <GradientStop Color="#FFdbebfb" Offset="0"/>
  81. <GradientStop Color="#FFc1dcfa" Offset="1"/>
  82. </LinearGradientBrush>
  83. </Setter.Value>
  84. </Setter>
  85. <Setter Property="BorderBrush" Value="#FF7da2ce"/>
  86. <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
  87. </Trigger>
  88. <MultiTrigger>
  89. <MultiTrigger.Conditions>
  90. <Condition Property="IsSelected" Value="true"/>
  91. <Condition Property="Selector.IsSelectionActive" Value="false"/>
  92. </MultiTrigger.Conditions>
  93. <Setter Property="Background">
  94. <Setter.Value>
  95. <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
  96. <GradientStop Color="#fff8f8f8" Offset="0"/>
  97. <GradientStop Color="#ffe5e5e5" Offset="1"/>
  98. </LinearGradientBrush>
  99. </Setter.Value>
  100. </Setter>
  101. <Setter Property="BorderBrush" Value="#FFd9d9d9"/>
  102. <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
  103. </MultiTrigger>
  104. <MultiTrigger>
  105. <MultiTrigger.Conditions>
  106. <Condition Property="IsSelected" Value="true"/>
  107. <Condition Property="Selector.IsSelectionActive" Value="false"/>
  108. <Condition Property="IsMouseOver" Value="true"/>
  109. </MultiTrigger.Conditions>
  110. <Setter Property="Background">
  111. <Setter.Value>
  112. <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
  113. <GradientStop Color="#FFdbebfb" Offset="0"/>
  114. <GradientStop Color="#FFc1dcfa" Offset="1"/>
  115. </LinearGradientBrush>
  116. </Setter.Value>
  117. </Setter>
  118. <Setter Property="BorderBrush" Value="#FF7da2ce"/>
  119. <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
  120. </MultiTrigger>
  121. <MultiDataTrigger>
  122. <MultiDataTrigger.Conditions>
  123. <Condition Binding="{Binding Path=IsActive}" Value="True"/>
  124. </MultiDataTrigger.Conditions>
  125. <Setter Property="Background">
  126. <Setter.Value>
  127. <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
  128. <GradientStop Color="#77dbfbeb" Offset="0"/>
  129. <GradientStop Color="#77c1fadc" Offset="1"/>
  130. </LinearGradientBrush>
  131. </Setter.Value>
  132. </Setter>
  133. <Setter Property="BorderBrush" Value="#777dcea2"/>
  134. <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
  135. </MultiDataTrigger>
  136. <MultiDataTrigger>
  137. <MultiDataTrigger.Conditions>
  138. <Condition Binding="{Binding
  139. RelativeSource={RelativeSource Mode=Self},
  140. Path=IsMouseOver}" Value="True"/>
  141. <Condition Binding="{Binding Path=IsActive}" Value="True"/>
  142. </MultiDataTrigger.Conditions>
  143. <Setter Property="Background">
  144. <Setter.Value>
  145. <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
  146. <GradientStop Color="#AAdbfbeb" Offset="0"/>
  147. <GradientStop Color="#AAc1fadc" Offset="1"/>
  148. </LinearGradientBrush>
  149. </Setter.Value>
  150. </Setter>
  151. <Setter Property="BorderBrush" Value="#AA7dcea2"/>
  152. <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
  153. </MultiDataTrigger>
  154. <MultiDataTrigger>
  155. <MultiDataTrigger.Conditions>
  156. <Condition Binding="{Binding
  157. RelativeSource={RelativeSource Mode=Self},
  158. Path=IsSelected}" Value="True"/>
  159. <Condition Binding="{Binding Path=IsActive}" Value="True"/>
  160. </MultiDataTrigger.Conditions>
  161. <Setter Property="Background">
  162. <Setter.Value>
  163. <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
  164. <GradientStop Color="#FFdbfbeb" Offset="0"/>
  165. <GradientStop Color="#FFc1fadc" Offset="1"/>
  166. </LinearGradientBrush>
  167. </Setter.Value>
  168. </Setter>
  169. <Setter Property="BorderBrush" Value="#FF7dcea2"/>
  170. <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
  171. </MultiDataTrigger>
  172. <Trigger Property="IsEnabled" Value="false">
  173. <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
  174. </Trigger>
  175. </ControlTemplate.Triggers>
  176. </ControlTemplate>
  177. </Setter.Value>
  178. </Setter>
  179. </Style>
  180. <Style x:Key="AeroHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
  181. <Setter Property="Background" Value="{x:Null}"/>
  182. <Setter Property="Foreground" Value="#FF5A6779"/>
  183. <Setter Property="BorderBrush" Value="{x:Null}"/>
  184. <Setter Property="Margin" Value="0,0,0,10"/>
  185. </Style>
  186. <Style x:Key="AeroHeaderThumbStyle" TargetType="{x:Type Thumb}">
  187. <Setter Property="Canvas.Right" Value="-8"/>
  188. <Setter Property="Canvas.Top" Value="-1"/>
  189. <Setter Property="Width" Value="18"/>
  190. <Setter Property="Height" Value="{Binding ActualHeight, RelativeSource={RelativeSource TemplatedParent}}"/>
  191. <Setter Property="Padding" Value="0"/>
  192. <Setter Property="Background" Value="Transparent"/>
  193. <Setter Property="Template">
  194. <Setter.Value>
  195. <ControlTemplate TargetType="{x:Type Thumb}">
  196. <Border Background="#00F90000" Padding="0" BorderThickness="1">
  197. <Rectangle x:Name="HeaderThumb" HorizontalAlignment="Center" Width="1">
  198. <Rectangle.Fill>
  199. <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
  200. <GradientStop Color="#d6e5f5" Offset="0.0" />
  201. <GradientStop Color="White" Offset="1.0" />
  202. </LinearGradientBrush>
  203. </Rectangle.Fill>
  204. </Rectangle>
  205. </Border>
  206. </ControlTemplate>
  207. </Setter.Value>
  208. </Setter>
  209. </Style>
  210. <Style x:Key="AeroHeaderThumbHoverStyle" TargetType="{x:Type Thumb}">
  211. <Setter Property="Canvas.Right" Value="-8"/>
  212. <Setter Property="Canvas.Top" Value="-1"/>
  213. <Setter Property="Width" Value="18"/>
  214. <Setter Property="Height" Value="{Binding ActualHeight, RelativeSource={RelativeSource TemplatedParent}}"/>
  215. <Setter Property="Padding" Value="0"/>
  216. <Setter Property="Background" Value="Transparent"/>
  217. <Setter Property="Template">
  218. <Setter.Value>
  219. <ControlTemplate TargetType="{x:Type Thumb}">
  220. <Border Background="#00F90000" Padding="0" BorderThickness="1">
  221. <Rectangle x:Name="HeaderThumb" Fill="#FFe2e8f1" HorizontalAlignment="Center" Width="1"/>
  222. </Border>
  223. </ControlTemplate>
  224. </Setter.Value>
  225. </Setter>
  226. </Style>
  227. <LinearGradientBrush x:Key="AeroListItemActiveFill" EndPoint="0,1" StartPoint="0,0">
  228. <GradientStop Color="#33dbfbdd" Offset="0"/>
  229. <GradientStop Color="#33c1fcc9" Offset="1"/>
  230. </LinearGradientBrush>
  231. <LinearGradientBrush x:Key="AeroListItemActiveHoverFill" EndPoint="0,1" StartPoint="0,0">
  232. <GradientStop Color="#88dbfbdd" Offset="0"/>
  233. <GradientStop Color="#88c1fcc9" Offset="1"/>
  234. </LinearGradientBrush>
  235. <LinearGradientBrush x:Key="AeroListItemActiveSelectedFill" EndPoint="0,1" StartPoint="0,0">
  236. <GradientStop Color="#ffdbfbdd" Offset="0"/>
  237. <GradientStop Color="#ffc1fcc9" Offset="1"/>
  238. </LinearGradientBrush>
  239. <LinearGradientBrush x:Key="AeroListItemSelectedFill" EndPoint="0,1" StartPoint="0,0">
  240. <GradientStop Color="#FFdbebfb" Offset="0"/>
  241. <GradientStop Color="#FFc1dcfa" Offset="1"/>
  242. </LinearGradientBrush>
  243. <LinearGradientBrush x:Key="AeroListItemSelectedInactiveFill" EndPoint="0,1" StartPoint="0,0">
  244. <GradientStop Color="#fff8f8f8" Offset="0"/>
  245. <GradientStop Color="#ffe5e5e5" Offset="1"/>
  246. </LinearGradientBrush>
  247. <LinearGradientBrush x:Key="AeroListItemSelectedHoverFill" EndPoint="0,1" StartPoint="0,0">
  248. <GradientStop Color="#77EAF9FF" Offset="0"/>
  249. <GradientStop Color="#77C9EDFD" Offset="1"/>
  250. </LinearGradientBrush>
  251. <ControlTemplate x:Key="AeroHeaderTemplate" TargetType="{x:Type GridViewColumnHeader}">
  252. <Grid>
  253. <Border BorderBrush="Transparent" Background="Transparent" BorderThickness="1,0,1,1" x:Name="OuterBorder" SnapsToDevicePixels="True">
  254. <Border BorderBrush="Transparent" BorderThickness="0,1,0,0" Background="Transparent" x:Name="InnerBorder"
  255. Margin="1,0,1,1" Padding="0" SnapsToDevicePixels="True">
  256. <ContentPresenter x:Name="HeaderContent"
  257. Margin="0"
  258. Content="{TemplateBinding Content}"
  259. ContentStringFormat="{TemplateBinding ContentStringFormat}"
  260. ContentTemplate="{TemplateBinding ContentTemplate}"/>
  261. </Border>
  262. </Border>
  263. <Canvas>
  264. <Thumb x:Name="PART_HeaderGripper" Style="{StaticResource AeroHeaderThumbStyle}"/>
  265. </Canvas>
  266. </Grid>
  267. <ControlTemplate.Triggers>
  268. <Trigger Property="IsMouseOver" Value="True">
  269. <Setter TargetName="OuterBorder" Property="BorderBrush" Value="#e2e8f1"/>
  270. <Setter TargetName="InnerBorder" Property="Background" Value="#f5f7fa"/>
  271. <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#f5f7fa"/>
  272. <Setter TargetName="PART_HeaderGripper" Property="Style" Value="{StaticResource AeroHeaderThumbHoverStyle}"/>
  273. </Trigger>
  274. </ControlTemplate.Triggers>
  275. </ControlTemplate>
  276. <GroupStyle x:Key="AeroGroupStyle">
  277. <GroupStyle.HeaderTemplate>
  278. <DataTemplate>
  279. <Border BorderBrush="Transparent" BorderThickness="1" Margin="0 13 0 0" Padding="10 5" Background="Transparent"
  280. CornerRadius="2" SnapsToDevicePixels="True" VerticalAlignment="Stretch" x:Name="OuterBorder">
  281. <Border x:Name="InnerBorder" BorderThickness="1" CornerRadius="1" VerticalAlignment="Stretch" Margin="0" Padding="0" SnapsToDevicePixels="True">
  282. <Grid>
  283. <Grid.ColumnDefinitions>
  284. <ColumnDefinition Width="Auto"/>
  285. <ColumnDefinition Width="*"/>
  286. </Grid.ColumnDefinitions>
  287. <TextBlock Grid.Column="0" FontSize="14" Text="{Binding Name}" Foreground="#1E3287"/>
  288. <Separator Grid.Column="1" Background="#E2E2E2" Height="1" HorizontalAlignment="Stretch" Margin="5 0 5 0" SnapsToDevicePixels="True" />
  289. </Grid>
  290. </Border>
  291. </Border>
  292. <DataTemplate.Triggers>
  293. <Trigger Property="IsMouseOver" Value="true">
  294. <Setter TargetName="OuterBorder" Property="Background">
  295. <Setter.Value>
  296. <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
  297. <GradientStop Color="#fffafbfd" Offset="0"/>
  298. <GradientStop Color="#ffebf4fd" Offset="1"/>
  299. </LinearGradientBrush>
  300. </Setter.Value>
  301. </Setter>
  302. <Setter TargetName="OuterBorder" Property="BorderBrush" Value="#ffb8d6fa"/>
  303. <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF"/>
  304. </Trigger>
  305. </DataTemplate.Triggers>
  306. </DataTemplate>
  307. </GroupStyle.HeaderTemplate>
  308. </GroupStyle>
  309. <!-- Classic styles -->
  310. <Style x:Key="ClassicRowStyle" TargetType="{x:Type ListViewItem}">
  311. <Setter Property="Background" Value="Transparent"/>
  312. <Setter Property="BorderBrush" Value="Transparent"/>
  313. <Setter Property="BorderThickness" Value="1"/>
  314. <Setter Property="Margin" Value="0,0,0,1"/>
  315. <Setter Property="Padding" Value="5,5,5,5"/>
  316. <Setter Property="VerticalContentAlignment" Value="Center"/>
  317. <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
  318. <Setter Property="Template">
  319. <Setter.Value>
  320. <ControlTemplate TargetType="{x:Type ListViewItem}">
  321. <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Margin="17,0,0,0" Padding="0"
  322. Background="{TemplateBinding Background}" CornerRadius="0" SnapsToDevicePixels="True" VerticalAlignment="Stretch">
  323. <Border x:Name="InnerBorder" BorderThickness="1" CornerRadius="0" VerticalAlignment="Stretch" Margin="0" Padding="0" SnapsToDevicePixels="True">
  324. <Grid VerticalAlignment="Stretch" Margin="0" SnapsToDevicePixels="True">
  325. <Grid.RowDefinitions>
  326. <RowDefinition MaxHeight="11"/>
  327. <RowDefinition/>
  328. </Grid.RowDefinitions>
  329. <!-- Presenter -->
  330. <GridViewRowPresenter Grid.RowSpan="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="-17,0,0,0"/>
  331. <!-- Strike -->
  332. <Border Background="Black" VerticalAlignment="Bottom" Height="1" SnapsToDevicePixels="True" x:Name="Strikethrough" Visibility="Collapsed"/>
  333. </Grid>
  334. </Border>
  335. </Border>
  336. <ControlTemplate.Triggers>
  337. <DataTrigger Binding="{Binding Path=Strike}" Value="True">
  338. <Setter TargetName="Strikethrough" Property="Visibility" Value="Visible"/>
  339. </DataTrigger>
  340. <Trigger Property="IsSelected" Value="true">
  341. <Setter Property="Background" Value="MidnightBlue" />
  342. <Setter TargetName="Strikethrough" Property="Background" Value="White" />
  343. <Setter Property="Foreground" Value="White" />
  344. </Trigger>
  345. <MultiDataTrigger>
  346. <MultiDataTrigger.Conditions>
  347. <Condition Binding="{Binding Path=IsActive}" Value="True"/>
  348. </MultiDataTrigger.Conditions>
  349. <Setter Property="Background" Value="DarkSeaGreen" />
  350. <Setter TargetName="Strikethrough" Property="Background" Value="White" />
  351. </MultiDataTrigger>
  352. <MultiDataTrigger>
  353. <MultiDataTrigger.Conditions>
  354. <Condition Binding="{Binding
  355. RelativeSource={RelativeSource Mode=Self},
  356. Path=IsSelected}" Value="True"/>
  357. <Condition Binding="{Binding Path=IsActive}" Value="True"/>
  358. </MultiDataTrigger.Conditions>
  359. <Setter Property="Background" Value="SeaGreen" />
  360. <Setter TargetName="Strikethrough" Property="Background" Value="White" />
  361. <Setter Property="Foreground" Value="White" />
  362. </MultiDataTrigger>
  363. </ControlTemplate.Triggers>
  364. </ControlTemplate>
  365. </Setter.Value>
  366. </Setter>
  367. </Style>
  368. <Style x:Key="ClassicHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
  369. </Style>
  370. <Style x:Key="ClassicStyle" TargetType="{x:Type ListView}">
  371. <Setter Property="BorderBrush" Value="{x:Null}"/>
  372. <Setter Property="BorderThickness" Value="0"/>
  373. </Style>
  374. <!-- Data templates -->
  375. <DataTemplate x:Key="HeaderTemplateArrowUp">
  376. <DockPanel>
  377. <Image Source="/GUI/Images/Misc/SortArrowUp.png" DockPanel.Dock="Top" Width="7" Height="4"/>
  378. <TextBlock Text="{Binding}" DockPanel.Dock="Top" Margin="5,0,3,0" TextTrimming="CharacterEllipsis"/>
  379. </DockPanel>
  380. </DataTemplate>
  381. <DataTemplate x:Key="HeaderTemplateArrowDown">
  382. <DockPanel>
  383. <Image Source="/GUI/Images/Misc/SortArrowDown.png" DockPanel.Dock="Top" Width="7" Height="4"/>
  384. <TextBlock Text="{Binding}" DockPanel.Dock="Top" Margin="5,0,3,0" TextTrimming="CharacterEllipsis"/>
  385. </DockPanel>
  386. </DataTemplate>
  387. <DataTemplate x:Key="HeaderTemplate">
  388. <TextBlock Text="{Binding}" Margin="5,4,3,0" TextTrimming="CharacterEllipsis"/>
  389. </DataTemplate>
  390. </ListView.Resources>
  391. </ListView>