小编Mar*_*cic的帖子

WPF StoryBoard.Completed事件未触发

关闭主窗口之前我有一个动画,如下面的代码所示.问题是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)

.net c# wpf storyboard

17
推荐指数
1
解决办法
1万
查看次数

为什么在这里使用Thread.MemoryBarrier?

浏览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)

c# thread-safety

6
推荐指数
1
解决办法
112
查看次数

TranslateTransform 取消 ScaleTransform

我是 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)

.net c# wpf

3
推荐指数
1
解决办法
2789
查看次数

标签 统计

c# ×3

.net ×2

wpf ×2

storyboard ×1

thread-safety ×1