Xaml 不使用';当条件不再满足时,不要自行撤消
有没有一种方法可以做到以下几点Xaml 不使用';当条件不再满足时,不要自行撤消,xaml,datatrigger,Xaml,Datatrigger,有没有一种方法可以做到以下几点 <Style TargetType="{x:Type: TreeViewItem}"> <Style.Triggers> <DataTrigger Binding="~Complex Binding~" Value="True" DoNotUnset="True"> <Setter Property="IsExpanded" Value="True"/>
<Style TargetType="{x:Type: TreeViewItem}">
<Style.Triggers>
<DataTrigger Binding="~Complex Binding~" Value="True" DoNotUnset="True">
<Setter Property="IsExpanded" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
我基本上希望这是一个“无撤销数据触发器”,如果你愿意的话。当该值不再为“True”时,我不希望它将“IsExpanded”设置回其以前的值
下面是我尝试使用enter操作来实现这一点,但这也有问题
<Style TargetType="{x:Type: TreeViewItem}">
<Style.Triggers>
<DataTrigger Binding="~Complex Binding~" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<BeginStoryboard.Storyboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(IsExpanded)" Duration="00:00:01" FillBehavior="Stop">
<BooleanKeyFrameCollection>
<DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="True"/>
</BooleanKeyFrameCollection>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard.Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
首先,这是疯狂的冗长,但其次,这只适用于BooleanAnimationUsingKeyFrames的持续时间。如果我将FillBehavior更改为“HoldEnd”,那么它看起来是正确的,但是现在用户不能再通过单击来取消展开treeviewitem(尽管奇怪的是,他们仍然可以通过使用键盘)
对于那些想知道的人:是的,我正试图通过绑定扩展树视图中的所有项,因为我不想构建递归ItemsGenerator.GetItemContainerFromIndex(I)循环。我仍然希望在代码的其他区域使用类似的“No Undo Datatigger”。我会将~Complex Binding~绑定到ViewModel中的bool,该bool一旦设置为true,则始终为true
private bool _onceTrueAlwaysTrue = false;
public bool OnceTrueAlwaysTrue
{
get
{
return _onceTrueAlwaysTrue;
}
set
{
if(value)
{
_onceTrueAlwaysTrue = true;
OnPropertyChanged("OnceTrueAlwaysTrue");
}
}
}
然后将此属性绑定到IsEnabled,您就可以了。如果要重置它,只需创建一个重置方法,该方法将_onceTrueAlwaysTrue=false
至于NoUndo datatrigger,据我所知,没有这样的东西。你每次都得做些工作
我会将~Complex Binding~绑定到ViewModel中的bool,该bool一旦设置为true,则始终为true
private bool _onceTrueAlwaysTrue = false;
public bool OnceTrueAlwaysTrue
{
get
{
return _onceTrueAlwaysTrue;
}
set
{
if(value)
{
_onceTrueAlwaysTrue = true;
OnPropertyChanged("OnceTrueAlwaysTrue");
}
}
}
然后将此属性绑定到IsEnabled,您就可以了。如果要重置它,只需创建一个重置方法,该方法将_onceTrueAlwaysTrue=false
至于NoUndo datatrigger,据我所知,没有这样的东西。你每次都得做些工作