MESCIUS InputMan for WPF 3.0J > InputMan for WPF の使い方 > テーマテンプレートを使用する > テーマテンプレートのカスタマイズ > ListBox.xaml |
ListBox.xaml では、リストコントロールの外観を定義します。
ListBox.xaml の内容は以下のとおりです。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:im="clr-namespace:GrapeCity.Windows.InputMan;assembly=GrapeCity.WPF.InputMan" xmlns:imp="clr-namespace:GrapeCity.Windows.InputMan.Primitives;assembly=GrapeCity.WPF.InputMan" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/GrapeCity.WPF.InputMan;component/Themes/Generic/Common.xaml"/> </ResourceDictionary.MergedDictionaries> <!--ListHeader--> <Style TargetType="{x:Type imp:ListHeader}" x:Key="ListHeader_StyleKey"> <Setter Property="Foreground" Value="#FF000000" /> <Setter Property="HorizontalContentAlignment" Value="Left" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="SeptorBrush" Value="#FFC9CACA" /> <Setter Property="Padding" Value="4" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type imp:ListHeader}"> <Grid SnapsToDevicePixels="true"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="MouseOver"> <Storyboard> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="(Fill).Color" To="#FF448DCA"/> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[3].Color" To="#7FFFFFFF"/> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[2].Color" To="#CCFFFFFF"/> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[1].Color" To="#F2FFFFFF"/> </Storyboard> </VisualState> <VisualState x:Name="Pressed"> <Storyboard> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="(Fill).Color" To="#FF448DCA"/> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[0].Color" To="#D8FFFFFF"/> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[1].Color" To="#C6FFFFFF"/> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[2].Color" To="#8CFFFFFF"/> <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[3].Color" To="#3FFFFFFF"/> </Storyboard> </VisualState> </VisualStateGroup> <VisualStateGroup x:Name="SortStates"> <VisualState x:Name="Unsorted" /> <VisualState x:Name="SortAscending"> <Storyboard> <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0"/> </Storyboard> </VisualState> <VisualState x:Name="SortDescending"> <Storyboard> <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0"/> <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="(RenderTransform).ScaleY" Duration="0" To="-.9"/> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Rectangle x:Name="BackgroundRectangle" Stretch="Fill" Fill="#FF1F3B53" Grid.ColumnSpan="2" /> <Rectangle x:Name="BackgroundGradient" Stretch="Fill" Grid.ColumnSpan="2" > <Rectangle.Fill> <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1"> <GradientStop Color="#FCFFFFFF" Offset="0.015" /> <GradientStop Color="#F7FFFFFF" Offset="0.375" /> <GradientStop Color="#E5FFFFFF" Offset="0.6" /> <GradientStop Color="#D1FFFFFF" Offset="1" /> </LinearGradientBrush> </Rectangle.Fill> </Rectangle> <Grid HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> <Path Grid.Column="1" Name="SortIcon" Fill="{TemplateBinding Foreground}" RenderTransformOrigin=".5,.5" HorizontalAlignment="Left" VerticalAlignment="Center" Opacity="0" Stretch="Uniform" Width="8" Margin="4,0,0,0" Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z "> <Path.RenderTransform> <ScaleTransform ScaleX=".9" ScaleY=".9" /> </Path.RenderTransform> </Path> </Grid> <Rectangle Name="VerticalSeptor" Grid.Column="1" Width="1" VerticalAlignment="Stretch" Fill="{TemplateBinding SeptorBrush}"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type imp:ListHeader}" BasedOn="{StaticResource ListHeader_StyleKey}"/> <!--ListBox--> <Style TargetType="{x:Type im:GcListBox}" x:Key="GcListBox_StyleKey"> <Setter Property="BorderThickness" Value="1"/> <Setter Property="BorderBrush" Value="{StaticResource ListBoxBorderBrush}"/> <Setter Property="Background" Value="#FFFFFFFF" /> <Setter Property="Foreground" Value="#FF000000"/> <Setter Property="HorizontalContentAlignment" Value="Left" /> <Setter Property="VerticalContentAlignment" Value="Top" /> <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/> <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> <Setter Property="ItemCheckBoxStyle"> <Setter.Value> <Style TargetType="CheckBox"> <Setter Property="Margin" Value="2,0,0,0"/> <Setter Property="VerticalAlignment" Value="Center"/> </Style> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type im:GcListBox}"> <Grid SnapsToDevicePixels="true"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"/> <VisualState x:Name="Disabled"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledVisualElement"> <DiscreteObjectKeyFrame KeyTime="0"> <DiscreteObjectKeyFrame.Value> <Visibility>Visible</Visibility> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="HeaderDisabledVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To="0.5"/> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Border CornerRadius="2" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> <Grid x:Name="ListBoxRoot" Margin="{TemplateBinding Padding}"> <Grid.Resources> <ControlTemplate x:Key="TopRightHeaderTemplate" TargetType="imp:ListHeader"> <Grid> <Border BorderThickness="1,0,0,0" BorderBrush="#FFC9CACA" Background="#FF1F3B53"> <Rectangle Stretch="Fill"> <Rectangle.Fill> <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1"> <GradientStop Color="#FCFFFFFF" Offset="0.015" /> <GradientStop Color="#F7FFFFFF" Offset="0.375" /> <GradientStop Color="#E5FFFFFF" Offset="0.6" /> <GradientStop Color="#D1FFFFFF" Offset="1" /> </LinearGradientBrush> </Rectangle.Fill> </Rectangle> </Border> </Grid> </ControlTemplate> </Grid.Resources> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition/> </Grid.RowDefinitions> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition Width="auto"/> </Grid.ColumnDefinitions> <imp:ListHeadersPresenter x:Name="ListHeadersPresenter" Grid.Column="0" Height="{TemplateBinding HeaderHeight}"/> <imp:ListHeader x:Name="TopRightCorner" Grid.Column="1" Template="{StaticResource TopRightHeaderTemplate}" Height="{TemplateBinding HeaderHeight}"/> </Grid> <Border x:Name="HeaderDisabledVisualElement" CornerRadius="2" IsHitTestVisible="False" Background="#8CFFFFFF" Opacity="0" Grid.ColumnSpan="2" /> <ScrollViewer x:Name="ScrollViewer" Grid.Row="1" Background="{TemplateBinding Background}" BorderBrush="Transparent" BorderThickness="0" HorizontalScrollBarVisibility="{TemplateBinding HorizontalScrollBarVisibility}" VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}" Focusable="True" Padding="0"> <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"/> </ScrollViewer> </Grid> </Border> <Border x:Name="DisabledVisualElement" CornerRadius="2" IsHitTestVisible="False" Opacity="0.5" Background="#8CFFFFFF" Visibility="Collapsed" BorderThickness="{TemplateBinding BorderThickness}" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type im:GcListBox}" BasedOn="{StaticResource GcListBox_StyleKey}"/> <!--ListItemBase--> <Style TargetType="{x:Type im:ListItemBase}" x:Key="ListItemBase_StyleKey"> <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type im:GcListBox}}}"/> <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment,RelativeSource={RelativeSource AncestorType={x:Type im:GcListBox}}}"/> <Setter Property="Padding" Value="3" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type im:ListItemBase}"> <Grid x:Name="Root" SnapsToDevicePixels="true"> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="MouseOver"> <Storyboard> <DoubleAnimation Storyboard.TargetName="MouseOverVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To=".35"/> </Storyboard> </VisualState> <VisualState x:Name="Disabled"> <Storyboard> <DoubleAnimation Storyboard.TargetName="ContentPresenterElement" Storyboard.TargetProperty="Opacity" Duration="0" To=".55" /> </Storyboard> </VisualState> </VisualStateGroup> <VisualStateGroup x:Name="SelectionStates"> <VisualState x:Name="Unselected" /> <VisualState x:Name="Selected"> <Storyboard> <DoubleAnimation Storyboard.TargetName="SelectedVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To=".75"/> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Rectangle x:Name="BackgroundElement" Grid.RowSpan="2" Fill="{TemplateBinding Background}" IsHitTestVisible="True"/> <Rectangle x:Name="MouseOverVisualElement" Grid.RowSpan="2" Opacity="0" Fill="#FFBADDE9" IsHitTestVisible="False"/> <Rectangle x:Name="SelectedVisualElement" Grid.RowSpan="2" Opacity="0" Fill="#FFBADDE9" IsHitTestVisible="False"/> <ContentPresenter x:Name="ContentPresenterElement" Margin="{TemplateBinding Padding}" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" ContentTemplateSelector="{TemplateBinding ContentControl.ContentTemplateSelector}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> <Rectangle Grid.Row="1" x:Name="BottomGridLine" Grid.Column="0" HorizontalAlignment="Stretch" Height="3" Fill="Transparent" IsHitTestVisible="False"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type im:ListItemBase}" BasedOn="{StaticResource ListItemBase_StyleKey}"/> <!--ListItem--> <Style TargetType="{x:Type im:ListItem}" x:Key="ListItem_StyleKey"> <Setter Property="Background" Value="Transparent"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type im:ListItem}"> <Grid x:Name="Root" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="true"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="MouseOver"> <Storyboard> <DoubleAnimation Storyboard.TargetName="MouseOverVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To=".35"/> </Storyboard> </VisualState> <VisualState x:Name="Disabled"> <Storyboard> <DoubleAnimation Storyboard.TargetName="SubItemsPresenter" Storyboard.TargetProperty="Opacity" Duration="0" To=".55" /> </Storyboard> </VisualState> </VisualStateGroup> <VisualStateGroup x:Name="SelectionStates"> <VisualState x:Name="Unselected" /> <VisualState x:Name="Selected"> <Storyboard> <DoubleAnimation Storyboard.TargetName="SelectedVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To=".75"/> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <Rectangle x:Name="BackgroundElement" Grid.RowSpan="2" Fill="{TemplateBinding Background}" IsHitTestVisible="True"/> <Rectangle x:Name="MouseOverVisualElement" Grid.RowSpan="2" Opacity="0" Fill="#FFBADDE9" IsHitTestVisible="False"/> <Rectangle x:Name="SelectedVisualElement" Grid.RowSpan="2" Opacity="0" Fill="#FFBADDE9" IsHitTestVisible="False"/> <imp:SubItemsPresenter x:Name="SubItemsPresenter"/> <Rectangle x:Name="BottomGridLine" Grid.Row="1" HorizontalAlignment="Stretch" Height="3" Fill="Transparent" IsHitTestVisible="False"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type im:ListItem}" BasedOn="{StaticResource ListItem_StyleKey}"/> <!--SubItem--> <Style TargetType="{x:Type im:SubItem}" x:Key="SubItem_StyleKey"> <Setter Property="Background" Value="Transparent" /> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Stretch" /> <Setter Property="Padding" Value="4" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type im:SubItem}"> <Grid SnapsToDevicePixels="true"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <ContentPresenter Grid.ColumnSpan="2" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}" /> <Rectangle x:Name="RightGridLine" Grid.Column="1" VerticalAlignment="Stretch" Width="3" Fill="Transparent" IsHitTestVisible="False"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type im:SubItem}" BasedOn="{StaticResource SubItem_StyleKey}"/> </ResourceDictionary>