Я создал один пользовательский элемент управления.Это метод, который вызывает проблемы: -
private void Update(object newContent)
{
//lock (this)
//{
if (grid == null)
base.ApplyTemplate();
ContentControl oldWrapper = this.currentWrappedControl;
if (oldWrapper != null)
{
VisualStateGroup layoutStatesGroup = findNameInWrapper(oldWrapper, "LayoutStates") as VisualStateGroup;
if (layoutStatesGroup == null)
{
this.grid.Children.Remove(oldWrapper);
setContent(oldWrapper, null);
}
else
{
layoutStatesGroup.CurrentStateChanged += delegate(object sender, VisualStateChangedEventArgs args)
{
this.grid.Children.Remove(oldWrapper);
setContent(oldWrapper, null);
};
VisualStateManager.GoToState(oldWrapper, "BeforeUnloaded", true);
}
}
ContentControl newWrapper = new ContentControl();
newWrapper.Style = TransitionStyle;
newWrapper.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
newWrapper.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
grid.Children.Add(newWrapper);
newWrapper.ApplyTemplate();
if (this.TransitionStyle != null)
{
setContent(newWrapper, newContent);
if (oldWrapper != null)
{
VisualStateManager.GoToState(newWrapper, "BeforeLoaded", false);
VisualStateManager.GoToState(newWrapper, "AfterLoaded", true);
}
}
this.currentWrappedControl = newWrapper;
//}
}
Все работает хорошо, если я нажимаю кнопки медленно.Но если я нажимаю кнопку беспокойно, она вылетает, и я получаю эту ошибку: -
Microsoft JScript runtime error: Unhandled Error in Silverlight Application Value does not fall within the expected range. at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
at MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, DependencyObject doh)
at MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty property, Object obj)
at System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
at System.Windows.DependencyObject.SetEffectiveValue(DependencyProperty property, EffectiveValueEntry& newEntry, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet)
at System.Windows.Controls.ContentPresenter.set_Content(Object value)
at SilverlightTransitionEffect.TransitionalControl.setContent(ContentControl control, Object Content)
at SilverlightTransitionEffect.TransitionalControl.Update(Object newContent)
at SilverlightTransitionEffect.TransitionalControl.OnContentChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.RefreshExpression(DependencyProperty dp)
at System.Windows.DependencyPropertyChangedWeakListener.SourcePropertyChanged(DependencyObject c, DependencyProperty dp)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyProperty dp)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyProperty dp)
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at SilverlightTransitionEffect.Slideshow.set_SelectedItem(Object value)
at SilverlightTransitionEffect.Slideshow.btnRightButton_Click(Object sender, RoutedEventArgs e)
at System.Windows.Controls.Primitives.ButtonBase.OnClick()
at System.Windows.Controls.Button.OnClick()
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)
Я даже пытался заблокировать объект, но проблема все еще та же.
Это мое визуальное состояние: -
<Style x:Key="SlideTemplate" TargetType="ContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Grid x:Name="grid" Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="LayoutStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.5">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="BeforeLoaded">
<Storyboard >
<DoubleAnimation Duration="0" To="500" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="grid"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid"/>
</Storyboard>
</VisualState>
<VisualState x:Name="AfterLoaded"/>
<VisualState x:Name="BeforeUnloaded">
<Storyboard>
<DoubleAnimation Duration="0" To="-1000" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="grid"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.RenderTransform>
<CompositeTransform/>
</Grid.RenderTransform>
<ContentPresenter x:Name="contentPresenter" Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Заранее спасибо:)
Ооо!и я забыл сказать, что анимация запускается, когда я нажимаю кнопки.