- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我正在尝试创建一个简单的动画,使背景从初始颜色变为新颜色并返回。
我遇到的最初问题是,我在触发动画的 MouseDownEvent 上创建了一个触发器,但用户可以在第一个动画完成之前触发另一个动画。这个新动画将从当前的阴影动画到新的颜色并返回。通过在动画进行时逐渐重新启动动画,原始颜色会丢失。
解决这个问题的最简单方法可能是我将完成的事件用于动画。但是,我不喜欢这个解决方案,因为我希望我的动画在资源字典中采用自定义样式,而不是控件本身的一部分。如果动画是资源字典中的自定义样式,那么它将无法访问控件本身的代码。有没有一种好的方法可以让动画工作同时保持样式和控件之间的分离?
然后我有了不同的想法。错误是因为我从 border.background.color 到新颜色再返回动画,因此如果我在旧动画运行时开始新动画,则新动画从先前动画所在的任何颜色值开始。但是,如果我将动画设置为返回原始背景颜色的某些已保存属性值,那么即使用户重新启动动画,我也不会有问题。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Components="clr-namespace:DaedalusGraphViewer.Components"
xmlns:Converters="clr-namespace:DaedalusGraphViewer.Components.Converters"
>
<Converters:ThicknessToLeftThicknessConverter x:Key="ThicknessToLeftThicknessConverter" />
<Style x:Key="SearchBoxListViewItemStyle" TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightBlue" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="{x:Type Components:SearchBox}" TargetType="{x:Type Components:SearchBox}">
<Style.Resources>
</Style.Resources>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Components:SearchBox}">
<Border x:Name="Border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid x:Name="LayoutGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ScrollViewer
x:Name="PART_ContentHost"
Grid.Column="0"
VerticalAlignment="Center"
/>
<Label
x:Name="DefaultTextLabel"
Grid.Column="0"
Foreground="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TextColor}"
Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=LabelText}"
VerticalAlignment="Center"
FontStyle="Italic"
/>
<Popup x:Name="RecentSearchesPopup"
IsOpen="False"
>
<ListView
x:Name="PreviousSearchesListView"
ListView.ItemContainerStyle="{StaticResource SearchBoxListViewItemStyle}"
>
</ListView>
</Popup>
<Border
x:Name="PreviousSearchesBorder"
Grid.Column="2"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="LightGray"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness,
Converter={StaticResource ThicknessToLeftThicknessConverter}}"
>
<Image
x:Name="PreviousSearchesIcon"
ToolTip="Previous Searches"
Width="15"
Height="15"
Stretch="Uniform"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Source="pack://application:,,,/DaedalusGraphViewer;component/Images/Previous.png"
/>
</Border>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="HasText" Value="True">
<Setter Property="Visibility" TargetName="DefaultTextLabel" Value="Hidden" />
</Trigger>
<Trigger
SourceName="DefaultTextLabel"
Property="IsMouseOver"
Value="True"
>
<Setter Property="Cursor" Value="IBeam" />
</Trigger>
<!--<EventTrigger RoutedEvent="Mouse.MouseDown" SourceName="PreviousSearchesBorder">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
AutoReverse="True"
Duration="0:0:0.2"
Storyboard.TargetName="PreviousSearchesBorder"
Storyboard.TargetProperty="(Border.Background).Color"
To="Black"
/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>-->
<Trigger Property="IsPopupOpening" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimationUsingKeyFrames
Storyboard.TargetName="PreviousSearchesBorder"
Storyboard.TargetProperty="(Border.Background).Color"
>
<LinearColorKeyFrame KeyTime="0:0:0.0" Value="{x:Static Components:SearchBox.DefaultRecentSearchesButtonColor}" />
<LinearColorKeyFrame KeyTime="0:0:0.2" Value="Black" />
<LinearColorKeyFrame KeyTime="0:0:0.4" Value="{x:Static Components:SearchBox.DefaultRecentSearchesButtonColor}" />
</ColorAnimationUsingKeyFrames>
<!--<ColorAnimation
AutoReverse="True"
Duration="0:0:0.2"
Storyboard.TargetName="PreviousSearchesBorder"
Storyboard.TargetProperty="(Border.Background).Color"
To="Black"
/>-->
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
但是,为了做到这一点,我需要存储原始背景属性,但我还没有让它工作。我不能使用绑定(bind),因为动画中的属性必须是可卡住的,所以我尝试在控件上创建一个静态属性,该属性在控件的加载事件中设置为原始值。
我在后面的代码中将颜色设置为背景色,但样式并未反射(reflect)该属性。
我在 xaml 中的静态引用是否正确?如果是这样,那么当样式应该从静态引用加载颜色时不是 onapplytemplate 吗?
最佳答案
好吧,你不能在没有卡住错误的情况下使用 DynamicResource。
如果您在运行时加载 Xaml 文件并将 StaticResource 添加到 Xaml 文件会怎样?
这是一个例子。 (我对 Xaml 文件进行了一些快速而肮脏的解析,但它适用于概念验证。)
将 StoryBoardResourceDictionary.xaml 的属性更改为 Content 和 Copy(如果较新)并删除 MSBuild:Compile 设置。
StoryBoardResourceDictionary.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="WindowWithTrigger" TargetType="Window">
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseDown">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" >
<EasingColorKeyFrame KeyTime="0:0:2" Value="White"/>
<!-- OriginalBackground is added at runtime -->
<EasingColorKeyFrame KeyTime="0:0:4" Value="{StaticResource OriginalBackground}"/> <!-- Load at runtime -->
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
MainWindow.xaml
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="BackgroundAnimationBlend.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480"
Style="{DynamicResource WindowWithTrigger}"
Background="DarkBlue"> <!--Change background to whatever color you want -->
</Window>
MainWindow.xaml.cs
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Markup;
namespace BackgroundAnimationBlend
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var rd2 = LoadFromFile();
this.Resources.MergedDictionaries.Add(rd2);
}
public ResourceDictionary LoadFromFile()
{
const string file = "Styles/StoryBoardResourceDictionary.xaml";
if (!File.Exists(file))
return null;
using (var fs = new StreamReader(file))
{
string xaml = string.Empty;
string line;
bool replaced = false;
while ((line = fs.ReadLine()) != null)
{
if (!replaced)
{
if (line.Contains("OriginalBackground"))
{
xaml += string.Format("<Color x:Key=\"OriginalBackground\">{0}</Color>", Background);
replaced = true;
continue;
}
}
xaml += line;
}
// Read in an EnhancedResourceDictionary File or preferably an GlobalizationResourceDictionary file
return XamlReader.Load(new MemoryStream(Encoding.UTF8.GetBytes(xaml))) as ResourceDictionary;
}
}
}
}
我现在不知道如何扩展它。所以也许这是一个疯狂的想法。但是在运行时加载样式并在加载之前将当前背景作为 xaml 字符串注入(inject)样式是我唯一可行的想法。
关于c# - 如何在不丢失原始颜色轨迹的情况下使背景颜色动画为新颜色并返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21467242/
我有一系列 gps 值,每个值包含:timestamp, latitude, longitude, n_sats, gps_speed, gps_direction, ... ( NMEA data
我正在尝试绘制两点之间的轨迹路径。我只知道有问题的两点和它们之间的距离。我希望能够计算的是到达终点所需的速度和角度。 我还希望能够将一些重力和风因素考虑在内,这样路径/轨迹就不那么“完美”了。它用于电
有没有人对使用顶点缓冲区/4f 颜色缓冲区绘制粒子在 opengl 中对来自喷气发动机(带有加力燃烧室)的粒子流进行编码的近似值有任何指导? 我认为这个问题有两个方面: 作为温度和与燃烧的气体类型相关
问题 我正在迁移多个 ggplot/ggvis plotly 到 plotly在 shiny应用。我遇到了一个关于跟踪链接的问题。我希望能够通过 group 显示/隐藏痕迹在图例上,在相关数据框之间共
我想为玩具车在没有障碍物的平面 (2d) 上规划一条路线。玩具车应该从点 (p1x,p1y) 移动到 (p2x,p2y)(又名狄利克雷边界条件)。此外,玩具车在起点的速度是(v1x,v1y),终点处要
我正在开发一个路径/ map 应用程序,该应用程序在一个区域中绘制了自定义路径,并将帮助用户在“森林”区域的一些路径周围导航。 目前,我正在使用 MKMapView 来获取用户数据/位置,并从 KML
我目前正在尝试根据从 iPhone 视频中拍摄的一系列图像重建坠落物体(例如球或石头)的 3D 轨迹。 我应该从哪里开始寻找?我知道我必须校准相机(我想我会使用 Jean-Yves Bouguet 的
我正在尝试使用 matplotlib 在 map 上绘制 CSV 文件中的线条和标记。 数据: AL99,2017080912,SHIP,0,17.1,-55.6,25,0 AL99,20170809
我正在尝试仅使用广播源来重建篮球的 3D 轨迹。 为此,我必须计算单应矩阵,因此在每一帧中,我都成功地跟踪了球,以及它们在“现实世界”中的位置已知的 6 个点(4 个在球场上,2 个在篮板上)为在图片
如果我有一个像这样的动画圈 example , 有没有一种方法可以在 Canvas 上留下 1px 纯白色的永久痕迹? 我试过动态构建路径,但无法让它工作。 提前致谢,如有任何帮助,我们将不胜感激 最
正在工作,即将发布,没有真正的更新,[6.3.2] 突然出现此错误。 花了一天时间在 OAuthSwift V0.3.4、0.3.5、0.3.6 之间切换,同样的错误发生了。还有一次(但非常罕见),我
我正在尝试使用 matlab/octave 为这个螺旋制作动画我希望它向上或向下螺旋 t = 0:0.1:10*pi; r = linspace (0, 1, numel (t)); z = lins
我有一个有点难的算法问题,我从很多搜索中找不到任何合适的算法,所以我希望 stackoverflow 上的人可能知道答案。 我有一组车辆在 2D 空间中移动时的 x,y 坐标,坐标记录在时间段内的“决
在服务器(MySQL 或 Oracle 或任何文件)上存储 GPS 坐标(航迹)的最佳方式是什么?例如,GoogleMaps 是如何实现的?我想保存和比较相同部分的轨道。 附言我有所有必要的数据。 最
The link to download the GPS traces on OSM is quite easy to get. 但是,里面的每个文件都 super 大。而且也没有地理位置分类。所以我
这个问题与地理空间信息系统的知识有些重叠,但我认为它属于这里而不是 GIS.StackExchange 有很多应用程序处理具有非常相似对象的 GPS 数据,其中大多数由 GPX standard 定义
我正在使用此处找到的 locu-node node.js 库:https://github.com/Locu-Unofficial/locu-node ,这是 Locu 服务的 API 客户端。在提供
我正在尝试将一个元素从位置 A 动画到位置 B,但我不希望它在每个点之间线性移动,我希望有一种“抛物线”轨迹。 我可以使用 jQuery.animate() 吗? 或者我应该使用 setInterva
总结:如何避免不同线程的不同工作负载导致的性能损失? (内核在每个线程上都有一个 while 循环) 问题:我想在许多不同的初始条件下使用 Runge-Kutta 求解粒子轨迹(由二阶微分方程描述)。
我正在创建一个应用程序,其中包含一些变量的区域数据。该应用程序允许您通过 selectInput 选择用户想要可视化的区域。出于比较/信息目的,我希望用户在 plot_ly 中可视化所选区域以及全国平
我是一名优秀的程序员,十分优秀!