我有一堆WPF UserControls在用户交互时内部触发一些动画.所有动画都有repeatbehavior ="true",所有动画都有相同的持续时间.现在我想在一个时间轴上同步所有这些动画,以便它们同步淡入淡出.无论用户何时触发动画.例如,如果动画全部持续3秒并且用户在第一个动画之后1.5秒触发第二个动画,我仍然希望动画同时达到其最大值.也许我可以在全局资源字典中定义全局时间线,在UserControls中某处定义的所有动画都可以使用?优选仅XAML.
我们有一些无法设计的UserControls.因此,VS 2008中的Windows窗体设计器几乎没用,并且在设备在意外双击解决方案资源管理器中的UserControl时抛出异常需要一些时间.在双击UserControl文件时,有没有办法让设计人员打开C#代码视图?
有没有办法在启用了抗锯齿的情况下绘制一个emf图元文件(从绘图工具导出)?我尝试的工具无法导出emf文件,因此我想知道在我的控件的OnPaint覆盖中绘制emf时是否可以手动将其重新打开.
如果任何人都可以确认在技术上可以生成抗锯齿的emf文件,另一种解决方案是使用可以导出到抗锯齿emf的绘图工具或者让第三方转换器稍后执行此操作.如果有人知道这样的工具,请告诉我.
编辑:当看到emf指令时,似乎emf本身并不能真正存储信息,无论它是否被渲染为抗锯齿.至少我找不到任何东西.抗锯齿更有可能是由回放引擎完成的.例如,当我在Word 2007中打开一个emf时,它会被渲染为抗锯齿.但是当我用GDI +"回放引擎"(Graphics.DrawImage(...))绘制它时.或者当我查看标准的Windows图像查看器时.这让我相信一些工具实际上有自己的emf播放引擎.所以也许有免费的.NET库(最好有源代码)给我一个存储在解析的emf文件中的emf指令的对象模型,所以我可以自己播放而不是使用Graphics.DrawImage(...)?
表单构建自己的MVVM我有以下代码,让我们有类型安全的NotifyOfPropertyChange调用:
public void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> property)
{
var lambda = (LambdaExpression)property;
MemberExpression memberExpression;
if (lambda.Body is UnaryExpression)
{
var unaryExpression = (UnaryExpression)lambda.Body;
memberExpression = (MemberExpression)unaryExpression.Operand;
}
else memberExpression = (MemberExpression)lambda.Body;
NotifyOfPropertyChange(memberExpression.Member.Name);
}
Run Code Online (Sandbox Code Playgroud)
这种方法与标准的简单字符串方法相比如何?有时我的属性会以非常高的频率发生变化.我可以安全地使用这种类型安全的方法吗?经过一些初步测试后,似乎确实产生了一些小的差异.这种方法可能导致内存负载多少CPU?
有没有办法确定在任何桌面连接的监视器中当前是否可以看到打开的WPF窗口?通过可见我的意思是窗口的边界矩形与任何监视器的桌面矩形相交.
我需要此功能来确定是否需要重新定位窗口,因为监视器配置(工作区域边界,监视器计数)在应用程序重新启动(保存窗口位置)之间发生了变化.
我已经提出了下面的代码,它似乎工作,但它有几个问题:
您是否知道解决上述部分或全部3个问题的解决方案?
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
internal static class Desktop
{
private static Size dpiFactor = new Size(1.0, 1.0);
private static bool isInitialized;
public static IEnumerable<Rect> WorkingAreas
{
get
{
return
Screen.AllScreens.Select(
screen =>
new Rect(
screen.WorkingArea.Left * dpiFactor.Width,
screen.WorkingArea.Top * dpiFactor.Height,
screen.WorkingArea.Width * dpiFactor.Width,
screen.WorkingArea.Height * dpiFactor.Height));
}
}
public static void TryInitialize(Visual visual)
{
if (isInitialized)
{
return;
}
var ps = PresentationSource.FromVisual(visual);
if (ps == null) …Run Code Online (Sandbox Code Playgroud) 当我在Visual Studio 2012中创建新的WPF应用程序时,默认情况下平台目标和构建配置设置为x86.为什么会这样?对于普通的WPF应用程序(没有任何对混合模式程序集的引用)使用AnyCPU是否存在任何危险,因此我的WPF可执行文件将被编译为x64机器上的x64代码和x86机器上的x86?
事件采购的CQRS看起来非常适合作为我们系统的架构,我们目前只关注一件小事:处理大量事件并处理大型事件存储.
我们当前的系统每天接收大约一百万个事件(目前与事件采购无关),如果我们将它们存储在更长的时间段内,我们的事件存储可能会变得非常大但是如果我们转储/清除经常滚动快照,我们可能会失去事件采购的一大优势:有关系统历史和重播的信息.
在CQRS架构中处理此问题的常用方法有哪些?这根本不是问题吗?我们只是在活动商店投放更多硬件,还是我们可以在架构设计层面做些什么?
在使用时await,默认情况下SynchronizationContext捕获(如果存在)并且await使用该上下文执行(继续块)之后的代码块(这导致线程上下文切换).
public async Task DoSomethingAsync()
{
// We are on a thread that has a SynchronizationContext here.
await DoSomethingElseAsync();
// We are back on the same thread as before here
//(well sometimes, depending on how the captured SynchronizationContext is implemented)
}
Run Code Online (Sandbox Code Playgroud)
虽然此默认值可能在您希望在异步操作完成后返回UI线程的UI上下文中有意义,但它似乎没有意义作为大多数其他方案的默认值.对于内部库代码来说当然没有意义,因为
在我看来,微软已经决定了错误的默认值.
现在我的问题:
有没有其他(最好是更好的)方法来解决这个问题,而不是混淆await我的代码中的所有调用.ConfigureAwait(false)?这很容易忘记,使代码可读性降低.
更新:await Task.Yield().ConfigureAwait(false);在每个方法的开头
调用是否足够?如果这可以保证我将在一个没有SynchronizationContextaferwards 的线程上,所有后续await调用都不会捕获任何上下文.
有没有办法将博客直接集成到我的HTML/javascript网站,而不必像SQL数据库和PHP或MySQL这样的动态引擎?
也许在网络上有一些服务提供这个(希望没有广告:)).或者也许我可以使用完全用javasript编写的博客引擎?
我需要调用在运行时通过反射确定的属性,并以高频率调用它们.所以我正在寻找具有最佳性能的解决方案,这意味着我可能会避免反思.我在考虑将属性访问器存储为列表中的Func和Action委托,然后调用它们.
private readonly Dictionary<string, Tuple<Func<object>, Action<object>>> dataProperties =
new Dictionary<string, Tuple<Func<object>, Action<object>>>();
private void BuildDataProperties()
{
foreach (var keyValuePair in this.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(p => p.Name.StartsWith("Data"))
.Select(
p =>
new KeyValuePair<string, Tuple<Func<object>, Action<object>>>(
p.Name,
Tuple.Create(this.GetGetter(p), this.GetSetter(p)))))
{
this.dataProperties.Add(keyValuePair.Key, keyValuePair.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如何将访问器分离为Func和Action为以后的调用进行分类?
仍然使用反射进行调用的天真实现如下所示:
private Func<object> GetGetter(PropertyInfo info)
{
// 'this' is the owner of the property
return () => info.GetValue(this);
}
private Action<object> GetSetter(PropertyInfo info)
{
// 'this' is the owner of the property
return v => info.SetValue(this, v); …Run Code Online (Sandbox Code Playgroud)