Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xaml 不使用';当条件不再满足时,不要自行撤消_Xaml_Datatrigger - Fatal编程技术网

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,据我所知,没有这样的东西。你每次都得做些工作