关闭主窗口之前我有一个动画,如下面的代码所示.问题是StoryBoard.Completed没有解雇.是什么原因引起了这个?
码
DoubleAnimation dblAnimX = new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(0.5)));
dblAnimX.SetValue(Storyboard.TargetProperty, this);
DoubleAnimation dblAnimY = new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(0.5)));
dblAnimY.SetValue(Storyboard.TargetProperty, this);
Storyboard story = new Storyboard();
Storyboard.SetTarget(dblAnimX, this);
Storyboard.SetTarget(dblAnimY, this);
Storyboard.SetTargetProperty(dblAnimX, new PropertyPath("RenderTransform.ScaleX"));
Storyboard.SetTargetProperty(dblAnimY, new PropertyPath("RenderTransform.ScaleY"));
story.Children.Add(dblAnimX);
story.Children.Add(dblAnimY);
story.Begin(this);
story.Completed += (o, s) => { this.Close(); };
Run Code Online (Sandbox Code Playgroud) 浏览MEF源代码我发现了这篇文章.有人可以解释为什么MemoryBarrier需要锁定?
整个方法是:
public void SatisfyImportsOnce(ComposablePart part)
{
this.ThrowIfDisposed();
if (this._importEngine == null)
{
ImportEngine importEngine = new ImportEngine(this, this._compositionOptions);
lock(this._lock)
{
if (this._importEngine == null)
{
Thread.MemoryBarrier();
this._importEngine = importEngine;
importEngine = null;
}
}
if(importEngine != null)
{
importEngine.Dispose();
}
}
this._importEngine.SatisfyImportsOnce(part);
}
Run Code Online (Sandbox Code Playgroud) 我是 WPF 的新手,在玩了相当长的一段时间后,我终于按照我正在工作的项目中喜欢的方式安排了控件。我有一个显示图像的矩形。鼠标滚轮通过ScaleTransform动画缩放图像,鼠标单击/拖动在屏幕上移动图像。问题是,如果我放大或缩小图像然后尝试移动它,它会自动将其缩放回 1(原始大小)。有什么办法可以在缩放时移动它吗?编辑:我尝试将 ScaleTransform 和 TranslateTransform 设置为 TransformGroup,但仍然不起作用。
我遇到的另一个问题是,如果图像比父容器大,它就会超出范围,我尝试ClipToBounds = True在父容器上进行设置,但没有用。
代码:
private void Window_MouseWheel_1(object sender, MouseWheelEventArgs e)
{
if (e.Delta > 0)
{
ScaleTransform scaleP = new ScaleTransform();
scaleP.CenterX = e.GetPosition(this).X;
scaleP.CenterY = e.GetPosition(this).Y;
rect.RenderTransform = scaleP;
DoubleAnimation dblAnimX = new DoubleAnimation();
dblAnimX.From = scaleXFrom;
dblAnimX.To = scaleXTo + 0.1;
scaleXFrom = scaleXTo +0.1;
scaleXTo += 0.1;
Duration = new Duration(TimeSpan.FromSeconds(0.15));
DoubleAnimation dblAnimY = new DoubleAnimation();
dblAnimY.From = scaleYFrom;
dblAnimY.To = scaleYTo + 0.1; …Run Code Online (Sandbox Code Playgroud)