我的usercontrol在itemscontrol中包含3000个NewDotControls。 ControlDmplate for NewDotControl以定义visualstates的样式指定,并且有一个eventtrigger在Loaded事件上调用GotoStateAction。
<Controls:NewDotControl Style="{StaticResource MyDotStyle}"/>
仅 3000个NewDotControl中的445个进入EventTrigger定义的“Selected”状态,而NewDotControls 的其余部分。当我使用绑定到ViewModel的DataTriggers时也会发生同样的情况。相同的xaml / code / app在WPF中工作。
<Style x:Key="MyDotStyle" TargetType="Control">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Control">
<Viewbox x:Name="viewbox" RenderTransformOrigin="0.5,0.5"
>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="UnSelected">
</VisualState>
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.StrokeThickness)" Storyboard.TargetName="InnerEllipse" d:IsOptimized="True">
<EasingDoubleKeyFrame KeyTime="0" Value="2"/>
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<ei:GoToStateAction StateName="Selected"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<Ellipse x:Name="InnerEllipse" Stroke="Red" StrokeThickness="0" RenderTransformOrigin="0.5,0.5"/>
</Viewbox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
为什么DataTriggers / EventTriggers / GotoStateAction不适用于ItemsControl中的所有控件?
如果我删除了初始的Loaded EventTrigger,大约775到800个NewDotControl会响应DataTriggers / GotoStateAction。如果我将Commands连接到控件,那么命令会执行并修改ViewModel属性并触发PropertyChanged事件,但仍然不会发生DataTrigger / GotoStateAction。
我能错过什么? itemscontrol中可以数据绑定的项目数量是否有限制?或者是否存在问题,因为这是在ControlTemplate中?为什么这在WPF中有效,而在Silverlight中无效?
谢谢! 拉杰什