我在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>
解决方法
简短的回答是,您所针对的控件类型没有“按下”的可视状态 – 因此,虽然您可以在Visual State Manager中引用任何状态,但这并不重要,因为控件的代码永远不会放置它进入那个州.
您可以通过查看其定义(使用TemplateVisualState属性声明它们)或查看this section on MSDN来查看控件支持哪些视觉状态.
这里的方法可能是使用Button(或你写的[ButtonBase] [2]的覆盖),因为它具有内置的“pressed”视觉状态.你只需要编写一个控制模板它提供了你所追求的布局/风格.
编辑这是一个例子:
控制模板(资源部分).这是Button控件的控件模板,但它实际上不是一个按钮.我只是用它来利用“pressed”视觉状态功能.
<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>
物品控制
将项目模板定义为使用上述ControlTemplate的“Button”.
<ItemsControl ItemsSource="{Binding SelectedItems}"> <ItemsControl.ItemTemplate> <DataTemplate> <Button Template="{StaticResource MyButtonTemplate}" Content="{Binding}" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。