xst*_*ter 7 silverlight xaml datatemplate visualstatemanager windows-phone-7
我在DataTemplate中有一些控件,我想控制它的按下状态行为.我做了以下我只是在DataTemplate中放入VisualStateManager但它似乎不起作用.我想我可以理解下面要做的事情.是否可以在DataTemplate标签内部进行内联?
<ItemsControl ItemsSource="{Binding Items}">
....
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid ...>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
...
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderThickness" Storyboard.TargetName="GridItemBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="3"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="Border" ...>
...
</Border>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
简而言之,您所定位的控件类型没有“按下”视觉状态 - 因此,虽然您可以引用视觉状态管理器中的任何状态,但这并不重要,因为控件的代码永远不会将其放入进入那种状态。
您可以通过查看控件的定义(它们是使用TemplateVisualState属性声明的)或查看MSDN 上的此部分来了解控件支持哪些视觉状态。
此处的方法可能是使用Button(或您编写的覆盖[ButtonBase][2]),因为它内置了“按下”视觉状态。您只需为其编写一个提供布局/样式的控制模板你所追求的。
编辑这是一个例子:
控制模板(资源部分)。 这是控件的控件模板Button,但它并不是真正的按钮。我只是用它来利用“按下”视觉状态功能。
<ControlTemplate x:Key="MyButtonTemplate" TargetType="Button">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderThickness)" Storyboard.TargetName="GridItemBorder">
<DiscreteObjectKeyFrame KeyTime="0" Value="3"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="GridItemBorder" BorderBrush="Orange" BorderThickness="1" Background="White">
<ContentPresenter Content="{TemplateBinding Content}" />
</Border>
</Grid>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
物品控制
将项目模板定义为使用上述 ControlTemplate 的“按钮”。
<ItemsControl ItemsSource="{Binding SelectedItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Template="{StaticResource MyButtonTemplate}" Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2828 次 |
| 最近记录: |