无论我做什么,我似乎都无法让数据触发器工作。当值更改但没有任何反应时,我正在尝试从视图模型播放故事板,没有错误,找不到绑定,什么都没有......我目前正在尝试工作的代码是:
XAML:
<Page
DataContext="{Binding ViewModel, Source={StaticResource Locator}}">
<Page.Resources>
<DataTrigger x:Key="alertInDataTrigger" Binding="{Binding alert}" Value="1">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource alertIn}" x:Name="alertIn_start"/>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="alertIn_start" />
</DataTrigger.ExitActions>
</DataTrigger>
<Storyboard x:Key="alertIn" Changed="visible" >
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="alert">
<EasingThicknessKeyFrame KeyTime="0:0:0.3" Value="729,2,2,658"/>
</ThicknessAnimationUsingKeyFrames>
</Storyboard>
<Page.Resources>
C#:
public int alert
{
get { return this._alert; }
set
{
if (this._alert != value)
{
int oldalert = this._alert;
this._alert = value;
RaisePropertyChanged("alert");
}
}
}
我可以看到 int 警报正确更改为 1,并且我知道页面绑定正在工作,因为页面上的所有其他绑定都正确显示其绑定,但我似乎无法让数据触发器工作。我可以在这个绊脚石上使用一点帮助:/
我看到你做错了两件事。一是触发器应该添加到Page.Triggers
而不是Page.Resources
。如果触发器位于资源中,则永远不会触发触发器。
另一个是Storyboard.TargetName="alert"
。除非Page
中有名为 alert 的元素,否则不应将其设置为 alert。我相信,如果您不添加Story.TargetName
那么它默认为当前元素,即页面。否则,请设置要为其边距添加动画效果的元素的名称。