Silverlight 4.0 VisualStateManager.gostate在ChildWindow中不工作

Silverlight 4.0 VisualStateManager.gostate在ChildWindow中不工作,silverlight-4.0,visualstatemanager,Silverlight 4.0,Visualstatemanager,我在silverlight 4应用程序中有一个ChildWindow,定义了两种可视状态 当我在Blend中预览视觉状态时,视觉状态会执行我想要的操作,但是当我调用ViewStateManager.GotoState时,它会返回false,并且视觉状态不会转换 这是我的XAML。长度的同位语 <controls:ChildWindow xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

我在silverlight 4应用程序中有一个ChildWindow,定义了两种可视状态

当我在Blend中预览视觉状态时,视觉状态会执行我想要的操作,但是当我调用ViewStateManager.GotoState时,它会返回false,并且视觉状态不会转换

这是我的XAML。长度的同位语

<controls:ChildWindow xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                      xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
                      xmlns:Controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input" 
                      xmlns:Controls1="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 
                      xmlns:Interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
                      xmlns:Behaviors="clr-namespace:Civica.UI.Common.Behaviors;assembly=Civica.UI.Common"
                      xmlns:Controls2="clr-namespace:Civica.UI.Common.Controls;assembly=Civica.UI.Common" 
                      xmlns:Helpers="clr-namespace:Civica.UI.Common.Helpers;assembly=Civica.UI.Common" 
                      x:Class="Civica.UI.Administration.Staff.StaffSearch.StaffSearchView"
                      mc:Ignorable="d"
                      d:DesignHeight="300" d:DesignWidth="400"
                      Width="800"
                      Helpers:VisualStateHelper.VisualStateName="{Binding Path=VisualStateName}">

    <controls:ChildWindow.Title>
        <TextBlock Text="Staff Search" Margin="0,4" TextWrapping="Wrap" />
    </controls:ChildWindow.Title>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="SearchResultsStateGroup">
                <VisualState x:Name="NoSearchResults">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="border">
                            <DiscreteObjectKeyFrame KeyTime="0">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>Visible</Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="textBlock">
                            <DiscreteObjectKeyFrame KeyTime="0">
                                <DiscreteObjectKeyFrame.Value>
                                    <Visibility>Visible</Visibility>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                        <DoubleAnimation Duration="0" To="0.3" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="dataGrid" d:IsOptimized="True"/>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <Grid Margin="0,0,0,7">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto "/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Controls:Label Content="Search for:" Margin="0,0,10,0"/>

            <Controls2:CommandTextBox Grid.Row="1" Grid.Column="1" 
                                      ImageHeight="16" ImageWidth="16"
                                      Text="{Binding CurrentSearchTerm, Mode=TwoWay}"
                                      Command="{Binding SearchCommand}" 
                                      CommandParameter="{Binding CurrentSearchTerm}"
                                      Image="/Civica.UI.Common.Images;component/Resources/Icons/16x16/RGB/icon-search-tiny.png" />
        </Grid>

        <Grid Grid.Row="1">
            <Controls1:DataGrid x:Name="dataGrid" AutoGenerateColumns="False" 
                                IsReadOnly="True"
                                AreRowGroupHeadersFrozen="True" 
                                CanUserResizeColumns="True" 
                                ItemsSource="{Binding CurrentSearchResults}"
                                SelectedItem="{Binding CurrentlySelectedSearchResult, Mode=TwoWay}"
                                VerticalScrollBarVisibility="Auto"
                                Height="300">
                <Interactivity:Interaction.Behaviors>
                    <Behaviors:DataGridDoubleClickBehaviour DoubleClickCommand="{Binding SelectSearchResultCommand}" 
                                                            CommandParameter="{Binding CurrentlySelectedSearchResult}"/>
                </Interactivity:Interaction.Behaviors>
                <Controls1:DataGrid.Columns>
                    <Controls1:DataGridTextColumn Header="Name" Binding="{Binding DisplayName}" IsReadOnly="True" />
                    <Controls1:DataGridTextColumn Header="Phone" Binding="{Binding TelephoneNumber}" IsReadOnly="True" />
                    <Controls1:DataGridTextColumn Header="Location" Binding="{Binding Location}" IsReadOnly="True" />
                </Controls1:DataGrid.Columns>
            </Controls1:DataGrid>
            <TextBlock x:Name="textBlock" Text="No Results Found" Foreground="Black" Opacity="1" FontSize="13" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="30" Visibility="Collapsed"/>
            <Border x:Name="border" Background="Black" Opacity="0.3" Visibility="Collapsed"/>
        </Grid>        
    </Grid>
</controls:ChildWindow>

我对Silverlight非常陌生,但我在Google上发现了这个,它似乎解决了您面临的问题:


我对Silverlight非常陌生,但我在Google上发现了这个,它似乎解决了您面临的问题:


它不适用于ChildWindow,但适用于UserControl或普通页面

VisualStateManager.GoToState(this, "MyState", true);
解决方案是,当您在ChildWindow中时,使用下面的代码

ExtendedVisualStateManager.GoToElementState(this.LayoutRoot as FrameworkElement, "MyState", true);

谢谢

它在儿童窗口中不起作用,但在用户控件或普通页面中起作用

VisualStateManager.GoToState(this, "MyState", true);
解决方案是,当您在ChildWindow中时,使用下面的代码

ExtendedVisualStateManager.GoToElementState(this.LayoutRoot as FrameworkElement, "MyState", true);
谢谢