- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有使用 MVVM 模式的 WPF 解决方案。它包含 ViewModel BlockViewModel:
public class BlockViewModel:ViewModelBase
{
private double _top;
public double Top
{
get
{
return _top;
}
set
{
if (_top == value)
{
return;
}
_top = value;
OnPropertyChanged("Top");
}
}
private bool _isAnimated;
public bool IsAnimated
{
get { return _isAnimated; }
set
{
if (_isAnimated == value)
{
return;
}
_isAnimated = value;
OnPropertyChanged("IsAnimated");
}
}
}
和 UserControl BlockView:
<UserControl
x:Class="BlockGame.Wpf.Views.BlockView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converters="clr-namespace:BlockGame.Wpf.Converters"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:blocks="clr-namespace:BlockGame.ViewModels.Blocks;assembly=BlockGame.ViewModels"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=blocks:BlockViewModel, IsDesignTimeCreatable=True}"
>
<UserControl.Resources>
<Storyboard x:Key="BlockStoryboard">
<DoubleAnimation x:Name="StoryboardAnimation" Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)" Storyboard.TargetName="Border" From="0" To="100" Duration="0:0:5" />
</Storyboard>
</UserControl.Resources>
<Border Width="100" Height="50" Name="Border" Background="Lavender" BorderThickness="1" BorderBrush="Black">
<Border.RenderTransform>
<TranslateTransform X="20" Y="{Binding Top}" />
</Border.RenderTransform>
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding IsAnimated}" Value="True">
<ei:ControlStoryboardAction Storyboard="{StaticResource BlockStoryboard}" />
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding IsAnimated}" Value="False">
<ei:ControlStoryboardAction Storyboard="{StaticResource BlockStoryboard}" ControlStoryboardOption="Pause" />
</ei:DataTrigger>
</i:Interaction.Triggers>
</Border>
</UserControl>
有什么方法可以在动画期间更新 Top 属性吗?
更新
看来我找到了可行的解决方案:
<Border.RenderTransform>
<TranslateTransform X="{Binding Left}" Y="0" x:Name="TranslateTransform" />
</Border.RenderTransform>
<i:Interaction.Triggers>
...
<ei:PropertyChangedTrigger Binding="{Binding ElementName=TranslateTransform, Path=Y}">
<ei:ChangePropertyAction Value="{Binding ElementName=TranslateTransform, Path=Y}" PropertyName="Top" TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext}"></ei:ChangePropertyAction>
</ei:PropertyChangedTrigger>
</i:Interaction.Triggers>
最佳答案
有趣的问题。 WPF 中的动画以依赖项属性为目标,当您启动它们时,有时没有很好的方法进行干预。一种方法是为动画使用自定义时间轴。这允许您为动画定义自己的计时机制。同样,我自己还没有尝试过。
查看您的代码,我发现 Top 属性绑定(bind)到边框的 Y 属性。因此,更改 top 属性本质上可能只是更改边框渲染变换的 Y 属性。
为什么不直接为边框设置动画,而不是为某些内容设置动画并尝试在此过程中更改 Top。如果要将边框动画与另一个动画同步,可以创建两个具有类似 To、From 和 Interval 设置的双动画对象。您可以同时启动两者以达到您想要的效果。
这是一个例子:
ScaleTransform st = new ScaleTransform();
this.RenderTransformOrigin = new Point(0.5, 0.5);
this.RenderTransform = st;
st.BeginAnimation(ScaleTransform.ScaleXProperty, scaleUp);
st.BeginAnimation(ScaleTransform.ScaleYProperty, scaleUp);
在这里,我将相同的动画应用于同一变换的两个不同属性,以按比例缩放某些内容。你可以对对象和它的边框元素做同样的事情
关于c# - 在 WPF 的 DoubleAnimation 期间更新 ViewModel 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21618446/
我有一个双重动画,其中窗口按比例缩小并移到一边。我在 Window_Deactivated 事件中执行此操作。代码如下:
在 Windows Phone 8.0 Silverlight 中,我可以在我的 XAML 页面中拍摄图像并使用以下 Storyboard 将其完全旋转一次。 我正尝试在我的新 Wind
我正在使用 DoubleAnimation用于放大和平移 map 。我的 map 是一张分辨率很高 (15,000 x 8,438) 的图像。问题是第一次缩放动画非常不稳定且不流畅,第二次变得更好等等
这应该很简单,但我似乎做对了。我收藏了 System.Windows.Controls.Image .当我选择其中一个时,我希望所有其他人都获得 0.5 的不透明度。 .我正在使用 MVVM,这背后的
作为展览,我正在尝试在 ScaleTransform 的 ScaleX 和 ScaleY 属性上使用 DoubleAnimation。我有一个矩形 (144x144),我想在五秒内将其变成矩形。 我的
我正在尝试绑定(bind)我的 DoubleAnimation代码隐藏中的 c# 变量的属性。 这是我的 XAML:
我在 XAML 中有一个带有 ItemTemplate 的 ListView,每个项目都包含一个 Button 和一个 字体图标。按下按钮后,我想在 FontIcon 上做一个旋转动画。我已经在 Da
我有一个包含多个 DoubleAnimations 的 Storyboard。我想在其中一个 child 完成时执行一个功能。但是,如果我将 EventHandler 附加到 DoubleAnimat
我正在尝试制作一个 Button,它使用该面板的 Height 属性上的动画打开/关闭该面板。 方法是将动画的“To”值绑定(bind)到 viewmodel 属性,该属性在按钮的命令中更改。 我想它
我正在尝试使用 DoubleAnimation 更改 StackPanel 的 Height 属性。该代码不会抛出任何异常。但是动画不起作用。
我希望有人可以帮助我解决我认为相对简单的问题。 我正在使用 DoubleAnimation 对象在代码中设置淡出动画。它淡出图像,然后在完成后触发 Completed 事件。 我想从事件处理程序中获取
好的,我正在使用 WPF 为我的 MP3 播放器制作一个 GUI,我有一个边框,可以为播放轨道的每一秒扩大其宽度属性,从而为当前播放的歌曲制作一个“进度条”。我将边框命名为 ProgressBarBo
为了了解动画和 UI,我正在制作一个基本的 WPF/C# 应用程序,用户可以在其中选择要显示的车辆数量,然后这些车辆(即不同车辆的图像)出现在 Canvas 中并四处移动。 WPF 非常简单:
我有使用 MVVM 模式的 WPF 解决方案。它包含 ViewModel BlockViewModel: public class BlockViewModel:ViewModelBase {
我有一个 ListBox.ItemTemplate,它有一个 ToggleButton,里面有一个复选框和一个来自 devexpress 的 ProgressBarEdit。 然后我有一个针对复选框的
我有一个 Windows 8.1 应用程序,其 Progress 定义如下 我有如下 StoryBoard 动画定义如下。 后面的 C# 代码调用 Storyboard 的 begin
我需要同时更改行和列。这可能吗?我搜索过但找不到答案 var da = new DoubleAnimation(); da.From = 0; da.T
我是一名优秀的程序员,十分优秀!