你需要手术吗?
我想,问题在于“启动时”的绑定。我添加了一个调度程序,并在一秒钟后再次抛出NotifyPropertyChanged。那就行了。很显然你可以这样解决。您等待控件加载完毕,然后再次抛出属性更改。这不是一个好的方法,与您的想法类似(如果我使用带有加载值的EventTrigger,…)
我建议您使用datastatebehavious。如果你有一个布尔值来决定你要去哪个州,这很好。这是一种行为,您可以将条件绑定到属性,然后设置true和false状态。
它看起来是这样的(我做了一些调整只是为了测试我的电脑):
<DataTemplate x:Key="SampleTemplate">
<StackPanel x:Name="SampleStack" Width="64" Height="60" Background="White">
<i:Interaction.Behaviors>
<ei:DataStateBehavior Binding="{Binding IsChecked}" Value="True" TrueState="Empty" FalseState="Base"/>
</i:Interaction.Behaviors>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Empty">
<Storyboard>
<ColorAnimation Duration="0" To="Red" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="SampleStack" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Base"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<TextBlock x:Name="StartOn" Text="Test"/>
</StackPanel>
</DataTemplate>
如您所见,我向VisualStateGroup添加了第二个状态(现在是空的和基的)。我建议这样做,不仅是因为datastatebehavious在一个组中至少需要两个状态。如果只有一个状态,则没有机会将此组的状态更改回正常状态,例如。
我希望这个答案对你有帮助。
比尔,
TJ公司