저는 INotifyPropertyChanged를 구현하는 클래스 용 DataTemplate을 보유하고 있습니다. 재산이 바뀌고 스토리 보드가 다른 값으로 바뀌면 스토리 보드를 실행할 수 있습니까?속성에 WPF Storyboard 트리거가 변경되었습니다.
그리고 datatemplate이 만들어진 클래스의 값에 따라 시작시 스토리 보드를 트리거 할 수있는 방법이 있습니까?
저는 INotifyPropertyChanged를 구현하는 클래스 용 DataTemplate을 보유하고 있습니다. 재산이 바뀌고 스토리 보드가 다른 값으로 바뀌면 스토리 보드를 실행할 수 있습니까?속성에 WPF Storyboard 트리거가 변경되었습니다.
그리고 datatemplate이 만들어진 클래스의 값에 따라 시작시 스토리 보드를 트리거 할 수있는 방법이 있습니까?
네, 그렇게 할 수 있습니다.
DataTrigger를 추가하고 해당 속성에 바인딩하십시오. 예를 들면 다음과 같습니다.
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
<BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
</DataTrigger>
</DataTemplate.Triggers>
원하는 값으로 테스트 할 값을 설정할 수 있습니다. 따라서 스토리 보드를 설정하여 값이 false로 변경 될 때 시작할 수 있습니다. 원하는만큼 많은 DataTriggers (또는 다른 트리거)를 추가 할 수 있습니다.
예에서 더미 속성과 스토리 보드를 참조합니다.
속성이 변경되면 바인딩이 업데이트되고 데이터 바인딩으로 인해 트리거가 실행됩니다.
이 기술은 시작시에도 작동해야합니다.
위의 포스터와 마찬가지로 DataTrigger를 사용하여 내 ViewModel의 속성에 바인딩했습니다. 혼란스러운 점은 데이터 트리거를 어디에 두어야하는지입니다. 루트 노드 (예 : Window)에 직접 넣습니다. Expression Blend를 사용하여 만든 태그 세부 정보를 처리했습니다. 또한
프로젝트에 대한 참조를 "Microsoft.Expression.Interactions"
XAML 포함해야합니다 (이 루트 노드에서 직접 이동)
<Window
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
x:Name="window" >
...
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding FlashingBackground, Mode=OneWay}" Value="ON">
<ei:ControlStoryboardAction Storyboard="{StaticResource MyAnimation}"
ControlStoryboardOption="Play"/>
</ei:DataTrigger>
</i:Interaction.Triggers>
...
</Window>
뷰 모델 :
private void TurnOnFlashingBackround()
{
FlashingBackground = "ON";
}
private string _FlashingBackround = "OFF";
public string FlashingBackground
{
get { return _FlashingBackround; }
private set
{
if (FlashingBackground == value)
{
return;
}
_FlashingBackround = value;
this.OnPropertyChanged("FlashingBackground");
}
}
public new event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
을
마지막으로 ViewModel은 "INotifyPropertyChanged"에서 상속해야합니다.
실제로이 예제는 블렌드 트리거를 사용합니다.이 블렌드 트리거는 내장 된 WPF 트리거와 매우 다릅니다. 그러나 그들은 같은 이름을지었습니다. 그냥 다른 네임 스페이스. 어떤면에서 Blend는 '부착 된'트리거로 간주 될 수 있지만 내재 된 요소는 배치 할 수있는 위치에 대한 매우 구체적인 규칙을 가지고 있습니다. –
완전한 예제를 보여주는 플러스 원. – MickyD
리스트 박스가 객체를 가져올 때 모든 값이 설정되면? – Peter
물건을 구입하면 스토리 보드가 해고 될 것입니다. 그것을 시도하고 볼 수 있습니다. –
어디 xaml에서 우리가 이것을 추가합니까? – swinefeaster