fork download
  1. <Window x:Class="Esempio_Tab___List.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:local="clr-namespace:Esempio_Tab___List"
  5. xmlns:sys="clr-namespace:System;assembly=mscorlib"
  6. Title="Esempio Tab + ListView" Height="375" Width="350"
  7. WindowStartupLocation="CenterScreen"
  8. Icon="/Esempio%20Tab%20%2b%20List;component/icon.ico"
  9.  
  10. DataContext="{Binding RelativeSource={RelativeSource Self}}">
  11.  
  12. <!--La riga che sta sopra (DataContext) serve per indicare alla classe che
  13. gestisce la finestra principale (MainWindow) che il binding della ListView (ItemSource <-> ListOfObject)
  14. dev'essere fatto attraverso una proprietà (ListOfObject) della classe stessa (MainWindow). -->
  15.  
  16.  
  17. <!--Dizionario locale di elementi utilizzabili nella finestra.
  18. Ogni elemento deve avere una chiave di riconoscimento (X:Key)
  19. per poter essere instanziato.-->
  20. <Window.Resources>
  21.  
  22.  
  23. <!--Template per la CheckBox della terza colonna-->
  24. <DataTemplate x:Key="CheckBoxTemplate">
  25. <StackPanel>
  26. <CheckBox IsChecked="{Binding Graduate}"/>
  27. </StackPanel>
  28. </DataTemplate>
  29.  
  30. <!--Permette di effettuare il binding con un'enumerazione-->
  31. <ObjectDataProvider x:Key="MusicData" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
  32. <ObjectDataProvider.MethodParameters>
  33. <x:Type TypeName="local:eMusic" />
  34. </ObjectDataProvider.MethodParameters>
  35. </ObjectDataProvider>
  36.  
  37. <!--Template per la ComboBox della quarta colonna-->
  38. <DataTemplate x:Key="ComboBoxTemplate">
  39. <StackPanel>
  40. <ComboBox ItemsSource="{Binding Source={StaticResource MusicData}}"
  41. SelectedItem="{Binding Music}" SelectionChanged="ComboBox_SelectionChanged" />
  42. </StackPanel>
  43. </DataTemplate>
  44.  
  45. <!--Template per il bottone della quinta colonna-->
  46. <DataTemplate x:Key="ButtonTemplate">
  47. <StackPanel>
  48. <Button Click="QuitBtn_Click" Width="35" Height="20">
  49. <Button.Content>
  50. <Image Source="del2.png" />
  51. </Button.Content>
  52. </Button>
  53. </StackPanel>
  54. </DataTemplate>
  55.  
  56.  
  57. <!--Definisce il tipo di organizzazione della ListView:
  58. due campi legati alle rispettive proprietà degli oggetti
  59. che compongono la lista (ListOfObject)-->
  60. <GridView x:Key="LView" x:Shared="False">
  61. <GridViewColumn Header="Nome" DisplayMemberBinding="{Binding Name}" />
  62. <GridViewColumn Header="Età" DisplayMemberBinding="{Binding Age}" />
  63. <GridViewColumn Header="Diplomato" CellTemplate="{StaticResource CheckBoxTemplate}" />
  64. <GridViewColumn Header="Musica" CellTemplate="{StaticResource ComboBoxTemplate}" />
  65. <GridViewColumn Header="Quit" CellTemplate="{StaticResource ButtonTemplate}" />
  66. </GridView>
  67.  
  68.  
  69. <!--Definisce lo stile che modifica il background degli elementi della
  70. ListView in base al valore dell'attributo Age.-->
  71. <Style x:Key="ContainerStyleItemValue" TargetType="{x:Type ListViewItem}">
  72.  
  73. <Style.Resources>
  74. <!-- Convertitore: il valore dell'età viene convertito nei
  75. valori -1, 0, o +1 -->
  76. <local:NumberToPolarValueConverter x:Key="PolarValueConv" />
  77. </Style.Resources>
  78.  
  79. <Style.Triggers>
  80. <!-- Quando l'età supera i 20 il background è verde -->
  81. <DataTrigger Binding="{Binding Age, Converter={StaticResource PolarValueConv}}" Value="+1">
  82. <Setter Property="Background" Value="LightGreen" />
  83. </DataTrigger>
  84. <!-- Quando l'età è sotto i 20 il background è rosso -->
  85. <DataTrigger Binding="{Binding Age, Converter={StaticResource PolarValueConv}}" Value="-1">
  86. <Setter Property="Background" Value="LightYellow" />
  87. </DataTrigger>
  88. </Style.Triggers>
  89.  
  90. </Style>
  91.  
  92.  
  93. <!--Definisce lo stile degli elementi della seconda lista (ordinati per età)
  94. in modo che l'elemento selezionato abbia background Coral.-->
  95. <Style TargetType="{x:Type ListViewItem}" x:Key="ContainerStyleSelectItem">
  96.  
  97. <Style.Triggers>
  98. <Trigger Property="IsSelected" Value="True">
  99. <Setter Property="Background" Value="Coral"/>
  100. </Trigger>
  101. </Style.Triggers>
  102.  
  103. <!--Imposta un evento di doppio click-->
  104. <EventSetter Event="MouseDoubleClick" Handler="SetDblClickColor" />
  105.  
  106. </Style>
  107.  
  108.  
  109. <!--Definisce il tipo di raggruppamento per la ListView e quale proprietà
  110. dev'essere presa come riferimento-->
  111. <CollectionViewSource x:Key="CollectionViewSrc" Source="{Binding ListOfObject}">
  112. <CollectionViewSource.GroupDescriptions>
  113. <PropertyGroupDescription PropertyName="Music" />
  114. </CollectionViewSource.GroupDescriptions>
  115. </CollectionViewSource>
  116.  
  117.  
  118. </Window.Resources>
  119.  
  120.  
  121.  
  122. <!-- Per il contenitore di Tab serve un TabControl:
  123. http://msdn.microsoft.com/en-us/library/system.windows.controls.tabcontrol.aspx -->
  124. <TabControl SelectionChanged="TabControl_SelectionChanged">
  125.  
  126. <!-- Ogni Tab corrisponde all'oggetto TabItem:
  127. http://msdn.microsoft.com/en-us/library/system.windows.controls.tabitem.aspx -->
  128. <TabItem x:Name="TabByName" Header="Ordinati per nome">
  129. <!--Ogni TabItem Contiene una ListView alla quale viene
  130. "legata" la collezione di oggetti che devono essere visualizzati (ItemSource),
  131. il formato di visualizzazione (View), e lo stile degli elementi
  132. che compongono le righe (ItemContainerStyle)-->
  133. <ListView ItemsSource="{Binding ListOfObject}"
  134. View="{StaticResource LView}"
  135. ItemContainerStyle="{StaticResource ContainerStyleItemValue}" />
  136. </TabItem>
  137.  
  138. <TabItem x:Name="TabByAge" Header="Ordinati per età">
  139. <ListView ItemsSource="{Binding ListOfObject}"
  140. View="{StaticResource LView}"
  141. ItemContainerStyle="{StaticResource ContainerStyleSelectItem}" />
  142. </TabItem>
  143.  
  144. <TabItem x:Name="TabByGroup" Header="Raggruppati per musica">
  145. <ListView ItemsSource='{Binding Source={StaticResource CollectionViewSrc}}'
  146. BorderThickness="0" View="{StaticResource LView}" x:Name="GListView">
  147. <!--Definisce lo stile del raggruppamento-->
  148. <ListView.GroupStyle>
  149. <GroupStyle>
  150. <GroupStyle.ContainerStyle>
  151. <Style TargetType="{x:Type GroupItem}">
  152. <Setter Property="Margin" Value="0,0,0,5"/>
  153. <Setter Property="Template">
  154. <Setter.Value>
  155. <ControlTemplate TargetType="{x:Type GroupItem}">
  156. <Expander IsExpanded="True" BorderThickness="0,0,0,1">
  157. <Expander.Header>
  158. <DockPanel>
  159. <TextBlock FontWeight="Bold" Text="{Binding Path=Name}"
  160. Margin="5,0,0,0" Width="50"/>
  161. <TextBlock Text="{Binding Path=ItemCount}" FontStyle="Italic"/>
  162. </DockPanel>
  163. </Expander.Header>
  164. <Expander.Content>
  165. <ItemsPresenter />
  166. </Expander.Content>
  167. </Expander>
  168. </ControlTemplate>
  169. </Setter.Value>
  170. </Setter>
  171. </Style>
  172. </GroupStyle.ContainerStyle>
  173. </GroupStyle>
  174. </ListView.GroupStyle>
  175. </ListView>
  176. </TabItem>
  177.  
  178. </TabControl>
  179.  
  180.  
  181. </Window>
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty