У меня есть пользовательский класс, который говорит «MyCanvas», полученный из класса Canvas класса wpf. В MyCanvas есть свойство «Масштаб» зависимости, которое определяет масштабное преобразование для холста. Теперь, когда изменяется значение Scale, я хочу оживить преобразование от старого значения до нового значения. для этого я использую метод LayoutTransform.BeginAnimation(...)
.LayoutTransform анимация на ScaleX и ScaleY нарушает привязку с ними
Код:
//This represents the time it will take to zoom
Duration zoomDuration = new Duration(TimeSpan.Parse("0:0:0.3"));
//Set up animation for zooming
DoubleAnimationUsingKeyFrames scaleAnimation = new DoubleAnimationUsingKeyFrames();
scaleAnimation.Duration = zoomDuration;
scaleAnimation.KeyFrames = GetAnimationSplines(newScale);
scaleAnimation.Completed += new EventHandler(
(sender, e) => Scale = newScale);
// Start the scale (zoom) animations
LayoutTransform.BeginAnimation(ScaleTransform.ScaleXProperty, scaleAnimation);
LayoutTransform.BeginAnimation(ScaleTransform.ScaleYProperty, scaleAnimation);
XMAL:
<Grid>
<ItemsControl x:Name="Items">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<local:MyCanvas Scale="{Binding Scale, Mode=TwoWay}">
<local:MyCanvas.LayoutTransform UseLayoutRounding="True">
<ScaleTransform ScaleX="{Binding Scale, Mode=TwoWay}"
ScaleY="{Binding Scale, Mode=TwoWay}"/>
</local:MyCanvas.LayoutTransform>
</local:MyCanvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
Но после выполнения этого кода, связывание ScaleX
и ScaleY
с Scale
(свойство в ViewModel) нарушает т.е. изменение значения Scale
делает не изменять масштаб на холсте.
Сообщение об ошибке (с помощью Snoop):
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Scale; DataItem=null; target element is 'ScaleTransform' (HashCode=796423); target property is 'ScaleX' (type 'Double')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Scale; DataItem=null; target element is 'ScaleTransform' (HashCode=796423); target property is 'ScaleY' (type 'Double')
Пожалуйста, дайте мне знать, если кто-нибудь имеет решение для этого. Спасибо
Где вы привязывали свойство ScaleTransform к свойству LayoutTransform? Пожалуйста, покажите этот код. Или не так ли? – Clemens