昨天想在 uwp 上实现,在 SplitView 控件的左侧,通过手指滑动打开 SplitView 的 Pane 面板,

而不仅仅是通过 “汉堡按钮” 点击打开。

   在 stackoverflow 看到一个帖子, 有讨论一个方案,然后看了一下里面的一个 github 工程,实现了

SwipeableSplitView(工程连接), 不过下载代码分析了一下,代码量太大,通过继承 SplitView 控件,添加很多 xaml 和

C# 代码,有点复杂了。于是想了一个简单的方式,直接控制 SplitView 中 Template 的  CompositeTransform

VisualTransition 属性就可以了,几十行 C# 代码就能搞定。

 

1、运行效果 (VS2015 创建的 win10 UWP 工程)

  1)在 phone上:

         10、Windows10 上,在窗口左侧向右滑动打开 SplitView 的 Pane面板

 

 

  2)在 win10 pc 上:

      10、Windows10 上,在窗口左侧向右滑动打开 SplitView 的 Pane面板

 

2、分析 SplitView 控件的模板(只用来分析,并不使用)

  1)在空白页面中,添加一个 SplitView,在文档大纲中,右键单击 SplitView 控件,选择编辑副本:

    10、Windows10 上,在窗口左侧向右滑动打开 SplitView 的 Pane面板

  2)在生成的代码中,可以看到,当前 SplitView 控件的组成部分:

  这里重点使用 PaneRoot 中的 PaneTransform 属性,和 视觉状态属性中的  VisualTransition From="Closed" To="OpenOverlayLeft" 属性。

10、Windows10 上,在窗口左侧向右滑动打开 SplitView 的 Pane面板

  

   VS 所有生成的 SplitView 的  Template 代码:

  1   <ControlTemplate x:Key="SplitViewControlTemplate1" TargetType="SplitView">
  2             <Grid Background="{TemplateBinding Background}">
  3                 <VisualStateManager.VisualStateGroups>
  4                     <VisualStateGroup x:Name="DisplayModeStates">
  5                         <VisualStateGroup.Transitions>
  6                             <VisualTransition From="Closed" To="OpenOverlayLeft">
  7                                 <Storyboard>
  8                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
  9                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 10                                     </ObjectAnimationUsingKeyFrames>
 11                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
 12                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 13                                     </ObjectAnimationUsingKeyFrames>
 14                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
 15                                         <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.NegativeOpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
 16                                         <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
 17                                     </DoubleAnimationUsingKeyFrames>
 18                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
 19                                         <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.OpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
 20                                         <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
 21                                     </DoubleAnimationUsingKeyFrames>
 22                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
 23                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 24                                     </ObjectAnimationUsingKeyFrames>
 25                                 </Storyboard>
 26                             </VisualTransition>
 27                             <VisualTransition From="Closed" To="OpenOverlayRight">
 28                                 <Storyboard>
 29                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
 30                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 31                                     </ObjectAnimationUsingKeyFrames>
 32                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
 33                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
 34                                     </ObjectAnimationUsingKeyFrames>
 35                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
 36                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
 37                                     </ObjectAnimationUsingKeyFrames>
 38                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
 39                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 40                                     </ObjectAnimationUsingKeyFrames>
 41                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
 42                                         <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.OpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
 43                                         <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
 44                                     </DoubleAnimationUsingKeyFrames>
 45                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
 46                                         <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.NegativeOpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
 47                                         <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
 48                                     </DoubleAnimationUsingKeyFrames>
 49                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
 50                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 51                                     </ObjectAnimationUsingKeyFrames>
 52                                 </Storyboard>
 53                             </VisualTransition>
 54                             <VisualTransition From="ClosedCompactLeft" To="OpenCompactOverlayLeft">
 55                                 <Storyboard>
 56                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
 57                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.CompactPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
 58                                     </ObjectAnimationUsingKeyFrames>
 59                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
 60                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
 61                                     </ObjectAnimationUsingKeyFrames>
 62                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
 63                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
 64                                     </ObjectAnimationUsingKeyFrames>
 65                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
 66                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 67                                     </ObjectAnimationUsingKeyFrames>
 68                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
 69                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 70                                     </ObjectAnimationUsingKeyFrames>
 71                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
 72                                         <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.NegativeOpenPaneLengthMinusCompactLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
 73                                         <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
 74                                     </DoubleAnimationUsingKeyFrames>
 75                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
 76                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 77                                     </ObjectAnimationUsingKeyFrames>
 78                                 </Storyboard>
 79                             </VisualTransition>
 80                             <VisualTransition From="ClosedCompactRight" To="OpenCompactOverlayRight">
 81                                 <Storyboard>
 82                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
 83                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
 84                                     </ObjectAnimationUsingKeyFrames>
 85                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
 86                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.CompactPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
 87                                     </ObjectAnimationUsingKeyFrames>
 88                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
 89                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
 90                                     </ObjectAnimationUsingKeyFrames>
 91                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
 92                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
 93                                     </ObjectAnimationUsingKeyFrames>
 94                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
 95                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
 96                                     </ObjectAnimationUsingKeyFrames>
 97                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
 98                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
 99                                     </ObjectAnimationUsingKeyFrames>
100                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
101                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
102                                     </ObjectAnimationUsingKeyFrames>
103                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
104                                         <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.OpenPaneLengthMinusCompactLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
105                                         <SplineDoubleKeyFrame KeyTime="0:0:0.35" KeySpline="0.1,0.9 0.2,1.0" Value="0"/>
106                                     </DoubleAnimationUsingKeyFrames>
107                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
108                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
109                                     </ObjectAnimationUsingKeyFrames>
110                                 </Storyboard>
111                             </VisualTransition>
112                             <VisualTransition From="OpenOverlayLeft" To="Closed">
113                                 <Storyboard>
114                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
115                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
116                                     </ObjectAnimationUsingKeyFrames>
117                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
118                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
119                                     </ObjectAnimationUsingKeyFrames>
120                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
121                                         <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.NegativeOpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
122                                     </DoubleAnimationUsingKeyFrames>
123                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
124                                         <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.OpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
125                                     </DoubleAnimationUsingKeyFrames>
126                                 </Storyboard>
127                             </VisualTransition>
128                             <VisualTransition From="OpenOverlayRight" To="Closed">
129                                 <Storyboard>
130                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
131                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
132                                     </ObjectAnimationUsingKeyFrames>
133                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
134                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
135                                     </ObjectAnimationUsingKeyFrames>
136                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
137                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
138                                     </ObjectAnimationUsingKeyFrames>
139                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
140                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
141                                     </ObjectAnimationUsingKeyFrames>
142                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneTransform" Storyboard.TargetProperty="TranslateX">
143                                         <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.OpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
144                                     </DoubleAnimationUsingKeyFrames>
145                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
146                                         <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.NegativeOpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
147                                     </DoubleAnimationUsingKeyFrames>
148                                 </Storyboard>
149                             </VisualTransition>
150                             <VisualTransition From="OpenCompactOverlayLeft" To="ClosedCompactLeft">
151                                 <Storyboard>
152                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
153                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.CompactPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
154                                     </ObjectAnimationUsingKeyFrames>
155                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
156                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
157                                     </ObjectAnimationUsingKeyFrames>
158                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
159                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
160                                     </ObjectAnimationUsingKeyFrames>
161                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
162                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
163                                     </ObjectAnimationUsingKeyFrames>
164                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
165                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
166                                     </ObjectAnimationUsingKeyFrames>
167                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
168                                         <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
169                                         <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.NegativeOpenPaneLengthMinusCompactLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
170                                     </DoubleAnimationUsingKeyFrames>
171                                 </Storyboard>
172                             </VisualTransition>
173                             <VisualTransition From="OpenCompactOverlayRight" To="ClosedCompactRight">
174                                 <Storyboard>
175                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
176                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
177                                     </ObjectAnimationUsingKeyFrames>
178                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
179                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.CompactPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
180                                     </ObjectAnimationUsingKeyFrames>
181                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
182                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
183                                     </ObjectAnimationUsingKeyFrames>
184                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
185                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
186                                     </ObjectAnimationUsingKeyFrames>
187                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
188                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
189                                     </ObjectAnimationUsingKeyFrames>
190                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
191                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
192                                     </ObjectAnimationUsingKeyFrames>
193                                     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
194                                         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
195                                     </ObjectAnimationUsingKeyFrames>
196                                     <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX">
197                                         <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
198                                         <SplineDoubleKeyFrame KeyTime="0:0:0.12" KeySpline="0.1,0.9 0.2,1.0" Value="{Binding TemplateSettings.OpenPaneLengthMinusCompactLength, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
199                                     </DoubleAnimationUsingKeyFrames>
200                                 </Storyboard>
201                             </VisualTransition>
202                         </VisualStateGroup.Transitions>
203                         <VisualState x:Name="Closed"/>
204                         <VisualState x:Name="ClosedCompactLeft">
205                             <Storyboard>
206                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
207                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.CompactPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
208                                 </ObjectAnimationUsingKeyFrames>
209                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
210                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
211                                 </ObjectAnimationUsingKeyFrames>
212                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
213                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
214                                 </ObjectAnimationUsingKeyFrames>
215                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
216                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
217                                 </ObjectAnimationUsingKeyFrames>
218                                 <DoubleAnimation Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX" To="{Binding TemplateSettings.NegativeOpenPaneLengthMinusCompactLength, RelativeSource={RelativeSource Mode=TemplatedParent}}" Duration="0:0:0"/>
219                             </Storyboard>
220                         </VisualState>
221                         <VisualState x:Name="ClosedCompactRight">
222                             <Storyboard>
223                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
224                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
225                                 </ObjectAnimationUsingKeyFrames>
226                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
227                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.CompactPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
228                                 </ObjectAnimationUsingKeyFrames>
229                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
230                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
231                                 </ObjectAnimationUsingKeyFrames>
232                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
233                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
234                                 </ObjectAnimationUsingKeyFrames>
235                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
236                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="2"/>
237                                 </ObjectAnimationUsingKeyFrames>
238                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
239                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
240                                 </ObjectAnimationUsingKeyFrames>
241                                 <DoubleAnimation Storyboard.TargetName="PaneClipRectangleTransform" Storyboard.TargetProperty="TranslateX" To="{Binding TemplateSettings.OpenPaneLengthMinusCompactLength, RelativeSource={RelativeSource Mode=TemplatedParent}}" Duration="0:0:0"/>
242                             </Storyboard>
243                         </VisualState>
244                         <VisualState x:Name="OpenOverlayLeft">
245                             <Storyboard>
246                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
247                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
248                                 </ObjectAnimationUsingKeyFrames>
249                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
250                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
251                                 </ObjectAnimationUsingKeyFrames>
252                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
253                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
254                                 </ObjectAnimationUsingKeyFrames>
255                             </Storyboard>
256                         </VisualState>
257                         <VisualState x:Name="OpenOverlayRight">
258                             <Storyboard>
259                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
260                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
261                                 </ObjectAnimationUsingKeyFrames>
262                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
263                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
264                                 </ObjectAnimationUsingKeyFrames>
265                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
266                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
267                                 </ObjectAnimationUsingKeyFrames>
268                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
269                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
270                                 </ObjectAnimationUsingKeyFrames>
271                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
272                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
273                                 </ObjectAnimationUsingKeyFrames>
274                             </Storyboard>
275                         </VisualState>
276                         <VisualState x:Name="OpenInlineLeft">
277                             <Storyboard>
278                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
279                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
280                                 </ObjectAnimationUsingKeyFrames>
281                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
282                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
283                                 </ObjectAnimationUsingKeyFrames>
284                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
285                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
286                                 </ObjectAnimationUsingKeyFrames>
287                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
288                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
289                                 </ObjectAnimationUsingKeyFrames>
290                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
291                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
292                                 </ObjectAnimationUsingKeyFrames>
293                             </Storyboard>
294                         </VisualState>
295                         <VisualState x:Name="OpenInlineRight">
296                             <Storyboard>
297                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
298                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
299                                 </ObjectAnimationUsingKeyFrames>
300                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
301                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.OpenPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
302                                 </ObjectAnimationUsingKeyFrames>
303                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
304                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
305                                 </ObjectAnimationUsingKeyFrames>
306                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
307                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
308                                 </ObjectAnimationUsingKeyFrames>
309                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="(Grid.Column)">
310                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
311                                 </ObjectAnimationUsingKeyFrames>
312                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
313                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
314                                 </ObjectAnimationUsingKeyFrames>
315                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
316                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
317                                 </ObjectAnimationUsingKeyFrames>
318                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
319                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
320                                 </ObjectAnimationUsingKeyFrames>
321                             </Storyboard>
322                         </VisualState>
323                         <VisualState x:Name="OpenCompactOverlayLeft">
324                             <Storyboard>
325                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
326                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.CompactPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
327                                 </ObjectAnimationUsingKeyFrames>
328                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.Column)">
329                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
330                                 </ObjectAnimationUsingKeyFrames>
331                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
332                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
333                                 </ObjectAnimationUsingKeyFrames>
334                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
335                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
336                                 </ObjectAnimationUsingKeyFrames>
337                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
338                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
339                                 </ObjectAnimationUsingKeyFrames>
340                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
341                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
342                                 </ObjectAnimationUsingKeyFrames>
343                             </Storyboard>
344                         </VisualState>
345                         <VisualState x:Name="OpenCompactOverlayRight">
346                             <Storyboard>
347                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition1" Storyboard.TargetProperty="Width">
348                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="*"/>
349                                 </ObjectAnimationUsingKeyFrames>
350                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ColumnDefinition2" Storyboard.TargetProperty="Width">
351                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{Binding TemplateSettings.CompactPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
352                                 </ObjectAnimationUsingKeyFrames>
353                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="(Grid.ColumnSpan)">
354                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="1"/>
355                                 </ObjectAnimationUsingKeyFrames>
356                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="Visibility">
357                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
358                                 </ObjectAnimationUsingKeyFrames>
359                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PaneRoot" Storyboard.TargetProperty="HorizontalAlignment">
360                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Right"/>
361                                 </ObjectAnimationUsingKeyFrames>
362                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="HorizontalAlignment">
363                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Left"/>
364                                 </ObjectAnimationUsingKeyFrames>
365                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="HCPaneBorder" Storyboard.TargetProperty="Visibility">
366                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
367                                 </ObjectAnimationUsingKeyFrames>
368                                 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LightDismissLayer" Storyboard.TargetProperty="Visibility">
369                                     <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
370                                 </ObjectAnimationUsingKeyFrames>
371                             </Storyboard>
372                         </VisualState>
373                     </VisualStateGroup>
374                 </VisualStateManager.VisualStateGroups>
375 
376                 <Grid.ColumnDefinitions>
377                     <ColumnDefinition x:Name="ColumnDefinition1" Width="{Binding TemplateSettings.OpenPaneGridLength, FallbackValue=0, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
378                     <ColumnDefinition x:Name="ColumnDefinition2" Width="*"/>
379                 </Grid.ColumnDefinitions>
380 
381                 <!-- Content Area -->
382                 <Grid x:Name="ContentRoot" Grid.ColumnSpan="2">
383                     <Border Child="{TemplateBinding Content}"/>
384                     <Rectangle x:Name="LightDismissLayer" Fill="Transparent" Visibility="Collapsed"/>
385                 </Grid>
386 
387                 <!-- Pane Content Area-->
388                 <Grid
389                     x:Name="PaneRoot"
390                     Grid.ColumnSpan="2"
391                     HorizontalAlignment="Left"
392                     Visibility="Collapsed"
393                     Background="{TemplateBinding PaneBackground}"
394                     Width="{Binding TemplateSettings.OpenPaneLength, RelativeSource={RelativeSource Mode=TemplatedParent}}">
395                     <Grid.Clip>
396                         <RectangleGeometry x:Name="PaneClipRectangle">
397                             <RectangleGeometry.Transform>
398                                 <CompositeTransform x:Name="PaneClipRectangleTransform"/>
399                             </RectangleGeometry.Transform>
400                         </RectangleGeometry>
401                     </Grid.Clip>
402                     <Grid.RenderTransform>
403                         <CompositeTransform x:Name="PaneTransform"/>
404                     </Grid.RenderTransform>
405                     <Border Child="{TemplateBinding Pane}"/>
406                     <Rectangle 
407                         x:Name="HCPaneBorder"
408                         x:DeferLoadStrategy="Lazy"
409                         Visibility="Collapsed"
410                         Fill="{ThemeResource SystemControlForegroundTransparentBrush}"
411                         Width="1"
412                         HorizontalAlignment="Right"/>
413                 </Grid>
414             </Grid>
415         </ControlTemplate>
View Code

相关文章: