C# Winrt Windows Phone 8.1 GoToStateTAction不工作?
我有WinRT电话应用程序,我想使用MVVM命令显示/隐藏顶部导航,但是我被卡住了。我无法使用VisualState和动画使动画正常工作 编辑: 我在stackpanel上丢失了一个rendertransform,但是它仍然不起作用 当我点击调用经典动画的按钮时,stackpanel正在隐藏自己。但是,我仍然无法使用GoToStateAction使stackpanel移动,你知道为什么吗 这是我的XAML(已更新): MVVM C#:C# Winrt Windows Phone 8.1 GoToStateTAction不工作?,c#,xaml,mvvm,winrt-xaml,C#,Xaml,Mvvm,Winrt Xaml,我有WinRT电话应用程序,我想使用MVVM命令显示/隐藏顶部导航,但是我被卡住了。我无法使用VisualState和动画使动画正常工作 编辑: 我在stackpanel上丢失了一个rendertransform,但是它仍然不起作用 当我点击调用经典动画的按钮时,stackpanel正在隐藏自己。但是,我仍然无法使用GoToStateAction使stackpanel移动,你知道为什么吗 这是我的XAML(已更新): MVVM C#: 使用系统; 使用System.Collections.Obj
使用系统;
使用System.Collections.ObjectModel;
使用系统组件模型;
使用System.Windows.Input;
使用GalaSoft.MvvmLight;
使用GalaSoft.MvvmLight.Command;
名称空间App3.ViewModels
{
公共类MainViewModel:ViewModelBase
{
公共主视图模型()
{
}
私有状态;
公共int显示状态
{
获取{return displayState;}
设置
{
设置(()=>DisplayState,ref DisplayState,value);
}
}
公共ICommand DisplayPopupCommand
{
得到
{
返回新的RelayCommand(
(p) =>
{
DisplayState=int.Parse(p);
});
}
}
公共ICommand CloseCommand
{
得到
{
返回新的RelayCommand()
=>DisplayState=1);
}
}
公共ICommand ShowTopNavCommand
{
得到
{
返回新的RelayCommand()
=>DisplayState=0);
}
}
公共事件属性更改事件处理程序属性更改;
私有void NotifyPropertyChanged(字符串propertyName)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(null!=处理程序)
{
处理程序(这是新的PropertyChangedEventArgs(propertyName));
}
}
}
}
有人知道我做错了什么吗?谢谢你的帮助 您是否尝试在GoToStateAction中指定TargetName我在GoToStateAction中没有TargetName我有TargetObject,但是它是一个框架元素,所以我尝试了TargetObject=“{Binding ElementName=NavStackPanel}”,但仍然不起作用=(您将绑定到TargetObject=“{Binding ElementName=LayoutRoot}”而不是NavStackPanel,如果是这样的话。所以我应该尝试TargetObject=“{Binding ElementName=LayoutRoot}”(不起作用)我不知道这是否也与您的问题有关,但在stackpanel中,我没有看到TranslateTransform的声明,
<Page
x:Class="App3.MainPage"
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:App3="using:App3"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Page.Resources>
<Storyboard x:Name="HideTopNavStoryboardV2">
<DoubleAnimation Duration="0:0:0.3" To="-140" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="NavStackPanel" d:IsOptimized="True"/>
<DoubleAnimation Duration="0:0:0.3" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="NavStackPanel" d:IsOptimized="True"/>
</Storyboard>
</Page.Resources>
<Grid x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="NavigationStateGroup">
<VisualState x:Name="HideTopNavStoryboard">
<Storyboard>
<DoubleAnimation Duration="0:0:0.3" To="-140" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="NavStackPanel" d:IsOptimized="True"/>
<DoubleAnimation Duration="0:0:0.3" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="NavStackPanel" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="ShowTopNavStoryboard">
<Storyboard>
<DoubleAnimation Duration="0:0:0.6" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="NavStackPanel" d:IsOptimized="True"/>
<DoubleAnimation Duration="0:0:0.6" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="NavStackPanel" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<interactivity:Interaction.Behaviors>
<core:DataTriggerBehavior Binding="{Binding DisplayState}" Value="0">
<core:GoToStateAction StateName="ShowTopNavStoryboard" TargetObject="{Binding ElementName=LayoutRoot}"/>
</core:DataTriggerBehavior>
<core:DataTriggerBehavior Binding="{Binding DisplayState}" Value="1">
<core:GoToStateAction StateName="HideTopNavStoryboard" TargetObject="{Binding ElementName=LayoutRoot}"/>
</core:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel
x:Name="NavStackPanel"
Grid.Row="0" >
<StackPanel.RenderTransform>
<CompositeTransform/>
</StackPanel.RenderTransform>
<TextBox Text="Search for something" />
<TextBlock Text="{Binding DisplayState ,Mode=TwoWay}" Foreground="Red" FontSize="23" HorizontalAlignment="Center"></TextBlock>
</StackPanel>
</Grid>
<Page.BottomAppBar>
<CommandBar Opacity="0.7">
<AppBarButton Label="Hide" Icon="Up" Command="{Binding CloseCommand}" />
<AppBarButton Label="Show" Icon="Add" Command="{Binding ShowTopNavCommand}" />
<AppBarButton Label="Hide" Icon="UpLoad" Click="ButtonBase_OnClick" />
</CommandBar>
</Page.BottomAppBar>
</Page>
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
HideTopNavStoryboardV2.Begin();
}
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Input;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
namespace App3.ViewModels
{
public class MainViewModel : ViewModelBase
{
public MainViewModel()
{
}
private int displayState;
public int DisplayState
{
get { return displayState; }
set
{
Set(() => DisplayState, ref displayState, value);
}
}
public ICommand DisplayPopupCommand
{
get
{
return new RelayCommand<string>(
(p) =>
{
DisplayState = int.Parse(p);
});
}
}
public ICommand CloseCommand
{
get
{
return new RelayCommand(()
=> DisplayState = 1);
}
}
public ICommand ShowTopNavCommand
{
get
{
return new RelayCommand(()
=> DisplayState = 0);
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}