저는 WPF를 처음 사용하고 있으며, 직사각형의 크기와 위치의 변경 사항에 애니메이션을 적용하려고합니다. INotifyPropertyChanged 속성에 바인딩하여 사각형을 설정했습니다. 이것은 잘 작동하지만 변경 사항은 극단적 일 수 있으며 시각적으로 덜 거슬 리기를 바랍니다. WPF에서 직사각형이있는 DataTrigger 사용시 문제가 발생했습니다.
이
은 잘 작동 :<Rectangle Fill="{x:Static SystemColors.ControlBrush}"
Stroke="black">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Canvas.Left" Value="{Binding Path=Coil.Left, Mode=OneWay}"/>
<Setter Property="Canvas.Top" Value="{Binding Path=Coil.Top, Mode=OneWay}"/>
<Setter Property="Width" Value="{Binding Path=Coil.Width, Mode=OneWay}"/>
<Setter Property="Height" Value="{Binding Path=Coil.Height, Mode=OneWay}"/>
</Style>
</Rectangle.Style>
Coil.Left 내에서 INotifyPropertyChanged 개체 내에서 RectangleF 구조와 후 뒤에 내 코드에서 설정되는 사각형을 포함하는 내 캔버스의 DataContext 속성입니다 개체가 생성됩니다.
내가이가 잘 EventTrigger를 사용하여 애니메이션을 할 수있었습니다 :
<Rectangle Fill="{x:Static SystemColors.ControlBrush}"
Stroke="black">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Canvas.Left" Value="{Binding Path=Coil.Left, Mode=OneTime}"/>
<Setter Property="Canvas.Top" Value="{Binding Path=Coil.Top, Mode=OneTime}"/>
<Setter Property="Width" Value="{Binding Path=Coil.Width, Mode=OneTime}"/>
<Setter Property="Height" Value="{Binding Path=Coil.Height, Mode=OneTime}"/>
</Style>
</Rectangle.Style>
<Rectangle.Triggers>
<EventTrigger RoutedEvent="Rectangle.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width"
To="{Binding Path=Coil.Width, Mode=OneWay}"
Duration="0:0:5"/>
<DoubleAnimation Storyboard.TargetProperty="Height"
To="{Binding Path=Coil.Height, Mode=OneWay}"
Duration="0:0:0.5"/>
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)"
To="{Binding Path=Coil.Left, Mode=OneWay}"
Duration="0:0:5"/>
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Top)"
To="{Binding Path=Coil.Top, Mode=OneWay}"
Duration="0:0:5"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Rectangle.Triggers>
내가 사각형을 통해 내 마우스를 이동하면 코일의 현재 속성 값에 애니메이션을 통해 변경 . 왼쪽, 위쪽, 너비 및 높이 예상대로.
그러나 내가 원하는 것은 Coil 속성 값을 변경하면 애니메이션이 변경됩니다. 따라서 DataTrigger를 설정하고 변환기를 사용하여 항상 true를 반환하면 변경으로 인해 애니메이션을 통해 변경 내용이 재생됩니다.
비록 내가 관계없이 DataTrigger를 사용할 때 창을 열기 전에 예외가 발생합니다. 왜 이런 일이 발생하는지 전혀 알 수 없습니다. 간단하게하기 위해, 나는 컨버터를 꺼내서 바로 직선 값 사용 :이 나에게 예외 오류를 줄 이유에
<Rectangle Fill="{x:Static SystemColors.ControlBrush}"
Stroke="black">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Canvas.Left" Value="{Binding Path=Coil.Left, Mode=OneTime}"/>
<Setter Property="Canvas.Top" Value="{Binding Path=Coil.Top, Mode=OneTime}"/>
<Setter Property="Width" Value="{Binding Path=Coil.Width, Mode=OneTime}"/>
<Setter Property="Height" Value="{Binding Path=Coil.Height, Mode=OneTime}"/>
</Style>
</Rectangle.Style>
<Rectangle.Triggers>
<DataTrigger Binding="{Binding Path=Coil.Height}" Value="60">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width"
To="{Binding Path=Coil.Width, Mode=OneWay}"
Duration="0:0:5"/>
<DoubleAnimation Storyboard.TargetProperty="Height"
To="{Binding Path=Coil.Height, Mode=OneWay}"
Duration="0:0:0.5"/>
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)"
To="{Binding Path=Coil.Left, Mode=OneWay}"
Duration="0:0:5"/>
<DoubleAnimation Storyboard.TargetProperty="(Canvas.Top)"
To="{Binding Path=Coil.Top, Mode=OneWay}"
Duration="0:0:5"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Rectangle.Triggers>
어떤 생각을? WPF에서 경험하지 못하는 문제 일뿐입니다. 이것은 나의 첫 번째 프로젝트입니다.
미리 감사드립니다. 만 EventTrigger
를 사용할 수있는 FrameworkElement
Rectangle
는 A에 대한 --John
예외는 무엇입니까? – evanb
예외 유형은 예외 읽기 System.Windows.Markup.XamlParseException 입니다 : System.Windows.Shapes.Rectangle '초기화' '{의 내부 예외가 에서 예외가 발생했습니다 "모음 회원 유형이어야합니다 트리거 EventTrigger. "} – ajw1970
아마 DataTriggers를 지원하는 DataTemplate을 사용하여 작업을 수행 할 수 있습니다 ... 아직까지는 읽지 못했습니다. – ajw1970