使用DataStateBehavior找不到状态名称

时间:2018-11-29 13:07:37

标签: wpf xaml visualstatemanager

我正在开发3年前开发的应用程序,此后一直未更新。我遇到了一个错误,但找不到它的来源...当第一个版本发布并且以前的开发人员不在这里时,它就起作用了。

它在listBox的dataTemplate中

我们正在使用这两个名称空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"                     
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 

这是模板:

<DataTemplate x:Key="EditableSelectionDataTemplate">
    <Grid x:Name="grid" Height="{DynamicResource ListBoxItemHeight}" d:DesignWidth="150">
        <i:Interaction.Behaviors>
            <ei:DataStateBehavior Binding="{Binding Mode=OneWay}" 
                Value="{Binding DataContext.EditionEntity, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}" 
                TrueState="EditState" 
                FalseState="NormalState"/>
        </i:Interaction.Behaviors>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="Common">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:0.2"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="EditState">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="NormalGrid">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="EditGrid">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="NormalState">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="EditGrid">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="EditGrid">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

        <Grid x:Name="NormalGrid">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="60" />
            </Grid.ColumnDefinitions>
<!-- Some stuff -->
</Grid>

        <Grid x:Name="EditGrid">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
<!-- some other stuff -->
</Grid>

在尝试找到状态EditState或NormalState中的任何状态之前,该行为都可以正常工作。它创建一个异常,内容如下: “在类型“网格”上找不到状态“ EditState”。请检查状态是否存在以及在此上下文中是否可访问。” (或以法语显示,原始消息:“在类型«Grid»中无法进行麻烦的编辑状态«EditState»。存在可访问性,并且可以在partir de ce上下文中访问它。”)

我确保它正在这个网格上而不是其他地方寻找状态。 根据我的收集,它应该查看所有visualStateGroups,然后查看所有visualState,以检查EditState是否存在...确实如此。

有什么想法吗?

0 个答案:

没有答案