#wpf #vb.net
#wpf #vb.net
Вопрос:
У меня есть эти границы и метки:
<Border x:Name="PulseBoba" Width="auto" Height="auto" Background="#FFF75959" CornerRadius="2" Margin="0" HorizontalAlignment="Left">
<Label Content="{Binding kolicina}" FontSize="20" DockPanel.Dock="Right" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="Bold" Width="Auto" Margin="5,0">
<Label.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="(Label.RenderTransform).(RotateTransform.Angle)"
From="0"
To="360"
Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Label.Triggers>
</Label>
</Border>
В моем vb.net код у меня есть этот фрагмент кода, который правильно устанавливает значения и отображается в label:
...
Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged
Private Sub NotifyPropertyChanged(ByVal info As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
End Sub
Public Property kolicina() As String
Get
Return m_kolicina
End Get
Set
m_kolicina = Value
NotifyPropertyChanged("kolicina")
End Set
End Property
...
Как бы я анимировал эту границу для мигания или поворота или любой другой анимации при изменении значения «колицина»?
Комментарии:
1. Во-первых, я вижу, что вам не хватает
Storyboard.TargetName=
, добавитьStoryboard.TargetName="PulseBoba"
, но это также, если вы хотите настроить таргетинг на границу, в противном случае вам нужно добавить имя к метке … есть и другие проблемы… IMHO создайте стиль, который вы можете использовать, который нацелен либо на метку, либо на границу, которую вы можете использовать.
Ответ №1:
Вы могли бы, например, связать Tag
свойство Border
и использовать EventTrigger
, которое прослушивает Binding.SourceUpdated
подключенное событие:
<Border x:Name="PulseBoba" Width="auto" Height="auto" Background="#FFF75959" CornerRadius="2" Margin="0" HorizontalAlignment="Left"
Tag="{Binding kolicina, NotifyOnTargetUpdated=True}">
<Border.RenderTransform>
<RotateTransform Angle="0" />
</Border.RenderTransform>
<Border.Triggers>
<EventTrigger RoutedEvent="Binding.SourceUpdated">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="(Border.RenderTransform).(RotateTransform.Angle)"
From="0"
To="360"
Duration="0:0:2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Border.Triggers>
<Label Content="{Binding kolicina}" FontSize="20" DockPanel.Dock="Right" HorizontalAlignment="Center" VerticalAlignment="Center"
FontWeight="Bold" Width="Auto" Margin="5,0" />
</Border>
Если вам требуется больше контроля, вы должны реализовать анимацию программно. Затем вы могли бы, например, обработать PropertyChanged
событие модели представления в представлении и создать Storyboard
себя в коде на основе любого условия. Это типичный пример случая, когда имеет смысл реализовать в представлении вещи, связанные с представлением.