ObservableCollection<Shape>
(DrawingInstructions)에 바인딩하고 추가 할 모양을 Line
으로 애니메이트하고자하는 MVVM을 사용하고 있습니다.WPF 데이터에 애니메이션을 적용하는 방법 라인 항목 (도형)
DoubleAnimation
종류의 방법으로 개별 선을 (X1, Y1)에서 (X2, Y2)까지 그려야합니다.
다음과 같은 변형을 시도했지만 작동하지 않습니다.
뷰 모델
<ItemsControl ItemsSource="{Binding Path=DrawingInstructions}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate >
<Canvas>
:
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard >
<DoubleAnimation Duration="0:0:2" Storyboard.TargetName="CurrentLine" Storyboard.TargetProperty="Position" From="{Binding Path=X1}" To="{Binding Path=X2}"/>
<DoubleAnimation Duration="0:0:2" Storyboard.TargetName="CurrentLine" Storyboard.TargetProperty="Position" From="{Binding Path=Y1}" To="{Binding Path=Y2}"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ItemsControl.Triggers>
는 이름이 라인의 도면 지침에 추가되는 코드가 포함되어 있습니다.
var line = new Line
{
X1 = currentSituation.Position.X,
Y1 = currentSituation.Position.Y,
X2 = newSituation.Position.X,
Y2 = newSituation.Position.Y,
Name = "CurrentLine",
Stroke = brush,
StrokeThickness = 2
};
drawingInstructions.Add(line);
UPDATE : 작품 @Nico 제안
솔루션 - Line
와 X1
, X2
, Y1
, Y2
및 TimeOffset
특성을 나타내는 "모델"클래스를 소개합니다. 애니메이션의 개별 속성을 사용하여 ObservableCollection<MyModelClass>
에 데이터 바인딩 :
<ItemsControl.ItemTemplate>
<DataTemplate>
<Line Name="CurrentLine" X1="{Binding X1}" Y1="{Binding Y1}" X2="{Binding X1}" Y2="{Binding Y1}" Stroke="Black" StrokeThickness="2">
<Line.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard >
<DoubleAnimation Storyboard.TargetName="CurrentLine" Storyboard.TargetProperty="X2" BeginTime="{Binding Path=TimeOffset}" From="{Binding Path=X1}" To="{Binding Path=X2}"/>
<DoubleAnimation Storyboard.TargetName="CurrentLine" Storyboard.TargetProperty="Y2" BeginTime="{Binding Path=TimeOffset}" From="{Binding Path=Y1}" To="{Binding Path=Y2}"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Line.Triggers>
</Line>
</DataTemplate>
</ItemsControl.ItemTemplate>
'currentLine'은 정확히 무엇입니까? 이것은'System.Windows.Shapes.Line'입니까? 이 이름을 가진 속성이 없으므로이 객체에서 'Position' 속성을 애니메이션으로 만들 수 없습니다. Shape 클래스의 정의를 추가하십시오. –
@Nico 죄송합니다, 당신 말이 맞아요. 'CurrentLine'은 (ViewModel 코드에서) ObservableCollection에 추가 된'Line'의 이름입니다. 이것을 반영하도록 질문을 수정하겠습니다. 이 접근법을'ValueConverter' ('Shape' ->'Line')에 대한 (가능한) 대안으로 사용하고 있습니다. – mhoff