1- <UserControl x : Class =" DataGridExtensionsSample.Views.Customized2View"
1+ <UserControl x : Class =" DataGridExtensionsSample.Views.Customized2View"
22 xmlns =" http://schemas.microsoft.com/winfx/2006/xaml/presentation"
33 xmlns : x =" http://schemas.microsoft.com/winfx/2006/xaml"
44 xmlns : mc =" http://schemas.openxmlformats.org/markup-compatibility/2006"
1111 xmlns : infrastructure =" clr-namespace:DataGridExtensionsSample.Infrastructure"
1212 mc : Ignorable =" d"
1313 d : DesignHeight =" 450" d : DesignWidth =" 800" d : DataContext =" {d:DesignInstance local:Customized2ViewModel}" >
14- <UserControl .Resources>
15- <CollectionViewSource x : Key =" SortedItems" Source =" {Binding DataProvider.Items}" >
16- <CollectionViewSource .SortDescriptions>
17- <componentModel : SortDescription PropertyName =" Column1" />
18- </CollectionViewSource .SortDescriptions>
19- </CollectionViewSource >
20- <Style x : Key =" DataGridComboBoxStyle" TargetType =" ComboBox" >
21- <Setter Property =" BorderThickness" Value =" 0" />
22- <Setter Property =" Padding" Value =" 3,2,0,0" />
23- <Setter Property =" Foreground" Value =" Green" />
24- </Style >
25- <Style x : Key =" DataGridTextBlockStyle" TargetType =" TextBlock" >
26- <Setter Property =" Foreground" Value =" Blue" />
27- </Style >
28- <ControlTemplate x : Key =" IntegerFilter" >
29- <controls : IntegerGreatherThanFilterControl Filter =" {Binding Path=Filter, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dgx:DataGridFilterColumnControl}}" />
30- </ControlTemplate >
31- <ControlTemplate x : Key =" FilterWithPopup" >
32- <controls : FilterWithPopupControl Filter =" {Binding Path=Filter, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dgx:DataGridFilterColumnControl}}" />
33- </ControlTemplate >
34- <ControlTemplate x : Key =" MultipleChoiceFilter" >
35- <dgx : MultipleChoiceFilter Filter =" {Binding Path=Filter, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dgx:DataGridFilterColumnControl}}" />
36- </ControlTemplate >
37- <ControlTemplate x : Key =" ComboboxFilter" >
38- <Grid d : DataContext =" {d:DesignInstance dgx:DataGridFilterColumnControl}" >
39- <Grid >
40- <Control Style =" {DynamicResource {x:Static dgx:DataGridFilter.IconStyleKey}}" />
41- <ComboBox x : Name =" ComboBox" Text =" {Binding Path=Filter, UpdateSourceTrigger=PropertyChanged}" ItemsSource =" {Binding SourceValues}" IsEditable =" True" />
42- </Grid >
43- </Grid >
44- <ControlTemplate .Triggers>
45- <Trigger SourceName =" ComboBox" Property =" Text" Value =" " >
46- <Setter TargetName =" ComboBox" Property =" Opacity" Value =" 0" />
47- </Trigger >
48- <Trigger SourceName =" ComboBox" Property =" Text" Value =" {x:Null}" >
49- <Setter TargetName =" ComboBox" Property =" Opacity" Value =" 0" />
50- </Trigger >
51- <Trigger SourceName =" ComboBox" Property =" IsMouseOver" Value =" True" >
52- <Setter TargetName =" ComboBox" Property =" Opacity" Value =" 1" />
53- </Trigger >
54- <Trigger SourceName =" ComboBox" Property =" IsFocused" Value =" True" >
55- <Setter TargetName =" ComboBox" Property =" Opacity" Value =" 1" />
56- </Trigger >
57- </ControlTemplate .Triggers>
58- </ControlTemplate >
59- <XmlDataProvider x : Key =" ComboBoxSource" Source =" ../SampleList.xml" XPath =" Items/Item" />
60- </UserControl .Resources>
61- <DockPanel >
62- <DockPanel DockPanel.Dock=" Top" Margin =" 10" >
63- <Button x : Name =" ClearIpsumButton" DockPanel.Dock=" Right" VerticalAlignment =" Top" Padding =" 5,2" Command =" {Binding ClearIpsumCommand}" >Clear Ipsum</Button >
64- <Button x : Name =" OpenAndPopulateAFilterButton" DockPanel.Dock=" Right" VerticalAlignment =" Top" Padding =" 5,2" Margin =" 0,0,10,0" Command =" {Binding OpenAndPopulateAFilterCommand}" >Open & Populate a Filter</Button >
65- <Button x : Name =" ProgrammaticAccessToFilterControlButton" DockPanel.Dock=" Right" VerticalAlignment =" Top" Padding =" 5,2" Margin =" 0,0,10,0" Command =" {Binding ProgrammaticAccessToFilterControlCommand}" >Change Popup Caption</Button >
66- <TextBlock TextWrapping =" WrapWithOverflow" >
14+ <UserControl .Resources>
15+ <CollectionViewSource x : Key =" SortedItems" Source =" {Binding DataProvider.Items}" >
16+ <CollectionViewSource .SortDescriptions>
17+ <componentModel : SortDescription PropertyName =" Column1" />
18+ </CollectionViewSource .SortDescriptions>
19+ </CollectionViewSource >
20+ <Style x : Key =" DataGridComboBoxStyle" TargetType =" ComboBox" >
21+ <Setter Property =" BorderThickness" Value =" 0" />
22+ <Setter Property =" Padding" Value =" 3,2,0,0" />
23+ <Setter Property =" Foreground" Value =" Green" />
24+ </Style >
25+ <Style x : Key =" DataGridTextBlockStyle" TargetType =" TextBlock" >
26+ <Setter Property =" Foreground" Value =" Blue" />
27+ </Style >
28+ <ControlTemplate x : Key =" IntegerFilter" >
29+ <controls : IntegerGreatherThanFilterControl Filter =" {Binding Path=Filter, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dgx:DataGridFilterColumnControl}}" />
30+ </ControlTemplate >
31+ <ControlTemplate x : Key =" FilterWithPopup" >
32+ <controls : FilterWithPopupControl Filter =" {Binding Path=Filter, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dgx:DataGridFilterColumnControl}}" />
33+ </ControlTemplate >
34+ <ControlTemplate x : Key =" MultipleChoiceFilter" >
35+ <dgx : MultipleChoiceFilter Filter =" {Binding Path=Filter, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dgx:DataGridFilterColumnControl}}" />
36+ </ControlTemplate >
37+ <ControlTemplate x : Key =" ComboboxFilter" >
38+ <Grid d : DataContext =" {d:DesignInstance dgx:DataGridFilterColumnControl}" >
39+ <Grid >
40+ <Control Style =" {DynamicResource {x:Static dgx:DataGridFilter.IconStyleKey}}" />
41+ <ComboBox x : Name =" ComboBox" Text =" {Binding Path=Filter, UpdateSourceTrigger=PropertyChanged}" ItemsSource =" {Binding SourceValues}" IsEditable =" True" />
42+ </Grid >
43+ </Grid >
44+ <ControlTemplate .Triggers>
45+ <Trigger SourceName =" ComboBox" Property =" Text" Value =" " >
46+ <Setter TargetName =" ComboBox" Property =" Opacity" Value =" 0" />
47+ </Trigger >
48+ <Trigger SourceName =" ComboBox" Property =" Text" Value =" {x:Null}" >
49+ <Setter TargetName =" ComboBox" Property =" Opacity" Value =" 0" />
50+ </Trigger >
51+ <Trigger SourceName =" ComboBox" Property =" IsMouseOver" Value =" True" >
52+ <Setter TargetName =" ComboBox" Property =" Opacity" Value =" 1" />
53+ </Trigger >
54+ <Trigger SourceName =" ComboBox" Property =" IsFocused" Value =" True" >
55+ <Setter TargetName =" ComboBox" Property =" Opacity" Value =" 1" />
56+ </Trigger >
57+ </ControlTemplate .Triggers>
58+ </ControlTemplate >
59+ <XmlDataProvider x : Key =" ComboBoxSource" Source =" ../SampleList.xml" XPath =" Items/Item" />
60+ </UserControl .Resources>
61+ <DockPanel >
62+ <DockPanel DockPanel.Dock=" Top" Margin =" 10" >
63+ <Button x : Name =" ClearIpsumButton" DockPanel.Dock=" Right" VerticalAlignment =" Top" Padding =" 5,2" Command =" {Binding ClearIpsumCommand}" >Clear Ipsum</Button >
64+ <Button x : Name =" OpenAndPopulateAFilterButton" DockPanel.Dock=" Right" VerticalAlignment =" Top" Padding =" 5,2" Margin =" 0,0,10,0" Command =" {Binding OpenAndPopulateAFilterCommand}" >Open & Populate a Filter</Button >
65+ <Button x : Name =" ProgrammaticAccessToFilterControlButton" DockPanel.Dock=" Right" VerticalAlignment =" Top" Padding =" 5,2" Margin =" 0,0,10,0" Command =" {Binding ProgrammaticAccessToFilterControlCommand}" >Change Popup Caption</Button >
66+ <TextBlock TextWrapping =" WrapWithOverflow" >
6767 <Run >This tab shows how to customize the filters in XAML when using explicit generated columns. Read the comments in the XAML for details.</Run ><LineBreak />
6868 <Run >- Overrides the default icon style to have a blue icon that changes to red when the column header is hovered.</Run ><LineBreak />
6969 <Run >- Overrides the default styles for some columns.</Run ><LineBreak />
70- </TextBlock >
71- </DockPanel >
72- <DataGrid Name =" DemoDataGrid" ItemsSource =" {Binding Source={StaticResource SortedItems}}" AutoGenerateColumns =" False" FrozenColumnCount =" 2"
70+ </TextBlock >
71+ </DockPanel >
72+ <DataGrid Name =" DemoDataGrid" ItemsSource =" {Binding Source={StaticResource SortedItems}}" AutoGenerateColumns =" False" FrozenColumnCount =" 2"
7373 SelectionUnit =" Cell"
7474 dgx:DataGridFilter.GlobalFilter=" {Binding GlobalFilter}"
7575 dgx:DataGridFilter.IsAutoFilterEnabled=" True"
7676 dgx:Tools.ApplyInitialSorting=" True"
7777 dgx:Tools.ForceCommitOnLostFocus=" True"
7878 dgx:DataGridFilter.FilterEvaluationDelay=" 0:0:0" >
79- <b : Interaction .Behaviors>
80- <dgx : ExtendedStarSizeBehavior />
81- <dgx : BeginEditOnCtrlEnterBehavior />
82- <dgx : DisableTargetWhileEditingBehavior Target =" {Binding ElementName=ClearIpsumButton}" />
83- </b : Interaction .Behaviors>
79+ <b : Interaction .Behaviors>
80+ <dgx : ExtendedStarSizeBehavior />
81+ <dgx : BeginEditOnCtrlEnterBehavior />
82+ <dgx : DisableTargetWhileEditingBehavior Target =" {Binding ElementName=ClearIpsumButton}" />
83+ </b : Interaction .Behaviors>
8484
85- <!-- Override the default styles for some columns... -->
86- <dgx : ColumnStyles .DefaultColumnStyles>
87- <dgx : DataGridColumnStyleCollection >
88- <dgx : DataGridColumnStyle ColumnType =" DataGridComboBoxColumn" EditingElementStyle =" {StaticResource DataGridComboBoxStyle}" />
89- <dgx : DataGridColumnStyle ColumnType =" DataGridTextColumn" ElementStyle =" {StaticResource DataGridTextBlockStyle}" />
90- </dgx : DataGridColumnStyleCollection >
91- </dgx : ColumnStyles .DefaultColumnStyles>
85+ <!-- Override the default styles for some columns... -->
86+ <dgx : ColumnStyles .DefaultColumnStyles>
87+ <dgx : DataGridColumnStyleCollection >
88+ <dgx : DataGridColumnStyle ColumnType =" DataGridComboBoxColumn" EditingElementStyle =" {StaticResource DataGridComboBoxStyle}" />
89+ <dgx : DataGridColumnStyle ColumnType =" DataGridTextColumn" ElementStyle =" {StaticResource DataGridTextBlockStyle}" />
90+ </dgx : DataGridColumnStyleCollection >
91+ </dgx : ColumnStyles .DefaultColumnStyles>
9292
93- <DataGrid .Resources>
94- <!-- Override default icon style to have a blue icon that changes to red when the column header is hovered. -->
95- <Style TargetType =" Control" x : Key =" {x:Static dgx:DataGridFilter.IconStyleKey}" BasedOn =" {StaticResource {x:Static dgx:DataGridFilter.IconStyleKey}}" >
96- <Setter Property =" Foreground" Value =" Blue" />
97- <Style .Triggers>
98- <DataTrigger Binding =" {Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumnHeader}}" Value =" True" >
99- <Setter Property =" Foreground" Value =" Red" />
100- </DataTrigger >
101- </Style .Triggers>
102- </Style >
93+ <DataGrid .Resources>
94+ <!-- Override default icon style to have a blue icon that changes to red when the column header is hovered. -->
95+ <Style TargetType =" Control" x : Key =" {x:Static dgx:DataGridFilter.IconStyleKey}" BasedOn =" {StaticResource {x:Static dgx:DataGridFilter.IconStyleKey}}" >
96+ <Setter Property =" Foreground" Value =" Blue" />
97+ <Style .Triggers>
98+ <DataTrigger Binding =" {Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumnHeader}}" Value =" True" >
99+ <Setter Property =" Foreground" Value =" Red" />
100+ </DataTrigger >
101+ </Style .Triggers>
102+ </Style >
103103
104- <DataTemplate x : Key =" CustomHeaderWithLeftAlignedSearch" >
105- <DockPanel >
106- <!-- The control to host the filter UI for this column -->
107- <dgx : DataGridFilterColumnControl DockPanel.Dock=" Left" />
108- <ContentPresenter x : Name =" PART_Content" Content =" {Binding}"
104+ <DataTemplate x : Key =" CustomHeaderWithLeftAlignedSearch" >
105+ <DockPanel >
106+ <!-- The control to host the filter UI for this column -->
107+ <dgx : DataGridFilterColumnControl DockPanel.Dock=" Left" />
108+ <ContentPresenter x : Name =" PART_Content" Content =" {Binding}"
109109 SnapsToDevicePixels =" {Binding SnapsToDevicePixels, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumnHeader}}"
110110 HorizontalAlignment =" {Binding HorizontalContentAlignment, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumnHeader}}"
111111 VerticalAlignment =" {Binding VerticalContentAlignment, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridColumnHeader}}" />
112- </DockPanel >
113- </DataTemplate >
112+ </DockPanel >
113+ </DataTemplate >
114114
115- </DataGrid .Resources>
115+ </DataGrid .Resources>
116116
117- <DataGrid .Columns>
118- <!-- Use a check box column for the boolean property "Flag" but override the column data type to use the default text filter template; also
117+ <DataGrid .Columns>
118+ <!-- Use a check box column for the boolean property "Flag" but override the column data type to use the default text filter template; also
119119 overrides the HeaderTemplate to show customization of the filter control. -->
120- <DataGridCheckBoxColumn Header =" Bool/Text"
120+ <DataGridCheckBoxColumn Header =" Bool/Text"
121121 HeaderTemplate =" {StaticResource ResourceKey=CustomHeaderWithLeftAlignedSearch}"
122122 Binding =" {Binding Path=Flag, Mode=OneWay}"
123123 dgx:DataGridFilterColumn.Template=" {StaticResource {x:Static dgx:DataGridFilter.TextColumnFilterTemplateKey}}" />
124- <!-- Use the integer filter for the integer column. -->
125- <DataGridTextColumn Header =" {Binding Path=Count, Source={StaticResource SortedItems}}" HeaderStringFormat =' {}Total: {0}'
124+ <!-- Use the integer filter for the integer column. -->
125+ <DataGridTextColumn Header =" {Binding Path=Count, Source={StaticResource SortedItems}}" HeaderStringFormat =' {}Total: {0}'
126126 Binding =" {Binding Index, Mode=OneWay}"
127127 Width =" *"
128128 dgx:DataGridFilterColumn.Template=" {StaticResource IntegerFilter}" />
129- <!-- Hide the filter for this column. -->
130- <DataGridTextColumn Header =" Text/No Filter/MultiLine" Binding =" {Binding Column5}"
129+ <!-- Hide the filter for this column. -->
130+ <DataGridTextColumn Header =" Text/No Filter/MultiLine" Binding =" {Binding Column5}"
131131 Width =" *"
132132 dgx:DataGridFilterColumn.IsFilterVisible=" False"
133133 dgx:Tools.IsMultilineEditingEnabled=" True"
134134 SortDirection =" Descending" />
135- <!-- Use the default filter for this column. -->
136- <DataGridTextColumn x : Name =" Column2"
135+ <!-- Use the default filter for this column. -->
136+ <DataGridTextColumn x : Name =" Column2"
137137 Header =" Text/Text"
138138 Binding =" {Binding Column2, Mode=OneWay}"
139139 Width =" *"
140140 dgx:DataGridFilterColumn.Filter=" {Binding Column2Filter}" />
141- <!-- Use a MultipleChoiceFilter for filtering -->
142- <DataGridComboBoxColumn Header =" Text/Custom" SelectedValueBinding =" {Binding Column5}"
141+ <!-- Use a MultipleChoiceFilter for filtering -->
142+ <DataGridComboBoxColumn Header =" Text/Custom" SelectedValueBinding =" {Binding Column5}"
143143 Width =" *" dgx:DataGridFilterColumn.Template=" {StaticResource MultipleChoiceFilter}"
144144 ItemsSource =" {Binding Source={StaticResource ComboBoxSource}}" />
145- <!-- Use a simple combo box for filtering -->
146- <DataGridComboBoxColumn Header =" Text/Custom" SelectedValueBinding =" {Binding Column5}"
145+ <!-- Use a simple combo box for filtering -->
146+ <DataGridComboBoxColumn Header =" Text/Custom" SelectedValueBinding =" {Binding Column5}"
147147 Width =" *" dgx:DataGridFilterColumn.Template=" {StaticResource ComboboxFilter}"
148148 ItemsSource =" {Binding Source={StaticResource ComboBoxSource}}" />
149- <!-- Use a special filter using a toggle button with a popup to enter more than one condition. -->
150- <DataGridTextColumn x : Name =" Column5"
149+ <!-- Use a special filter using a toggle button with a popup to enter more than one condition. -->
150+ <DataGridTextColumn x : Name =" Column5"
151151 Header =" Double/Custom" Binding =" {Binding Probability, Mode=OneWay}" Width =" *"
152152 dgx:DataGridFilterColumn.Template=" {StaticResource FilterWithPopup}"
153153 dgx:DataGridFilterColumn.Filter=" {Binding Column5Filter}"
154154 dgx:DataGridFilterColumn.DataGridFilterColumnControl=" {Binding Column5FilterColumnControl}" />
155- <DataGridTextColumn Header =" Column5.Length"
155+ <DataGridTextColumn Header =" Column5.Length"
156156 Binding =" {Binding Column5.Length}"
157157 dgx:DataGridFilterColumn.Template=" {StaticResource MultipleChoiceFilter}" />
158- <DataGridTextColumn Header =" Column5[1]"
158+ <DataGridTextColumn Header =" Column5[1]"
159159 Binding =" {Binding Column5[1]}"
160160 dgx:DataGridFilterColumn.Template=" {StaticResource MultipleChoiceFilter}" />
161- <DataGridTextColumn x : Name =" ColumnTextWithPrefilter"
161+ <DataGridTextColumn x : Name =" ColumnTextWithPrefilter"
162162 Header =" WithPreFilter" Binding =" {Binding Column5}" Width =" *"
163163 dgx:DataGridFilterColumn.Template=" {StaticResource MultipleChoiceFilter}"
164- dgx:DataGridFilterColumn.Filter=" {Binding ColumnTextWithPrefilterFilter}" />
165- <!-- A template column may contain everything, so we need to specify the SortMemberPath explicitly...-->
166- <DataGridTemplateColumn Header =" Template" SortMemberPath =" Probability" >
167- <DataGridTemplateColumn .CellTemplate>
168- <DataTemplate DataType =" infrastructure:DataItem" >
169- <TextBlock Margin =" 2" Text =" {Binding Probability}" />
170- </DataTemplate >
171- </DataGridTemplateColumn .CellTemplate>
172- </DataGridTemplateColumn >
173- </DataGrid .Columns>
174- </DataGrid >
175- </DockPanel >
176- </UserControl >
164+ dgx:DataGridFilterColumn.Filter=" {Binding ColumnTextWithPrefilterFilter}" />
165+ <!-- A template column may contain everything, so we need to specify the SortMemberPath explicitly...-->
166+ <DataGridTemplateColumn Header =" Template" SortMemberPath =" Probability" >
167+ <DataGridTemplateColumn .CellTemplate>
168+ <DataTemplate DataType =" infrastructure:DataItem" >
169+ <TextBlock Margin =" 2" Text =" {Binding Probability}" />
170+ </DataTemplate >
171+ </DataGridTemplateColumn .CellTemplate>
172+ </DataGridTemplateColumn >
173+ </DataGrid .Columns>
174+ </DataGrid >
175+ </DockPanel >
176+ </UserControl >
0 commit comments