3

我正在尝试创建一个 on 事件操作,它可以用于许多对象。为此,我将目标对象的名称存储在 Tag 属性中。因此,在事件被触发时:

private void ShowDeleteButton(object sender, System.Windows.Input.MouseEventArgs e)
{
    Duration TimeToTake = new Duration(new TimeSpan(0,0,0,0,300));
    DoubleAnimation ShowButton = new DoubleAnimation(0, 104, TimeToTake);
    DoubleAnimation HideButton = new DoubleAnimation(104, 0, TimeToTake);
    (sender as Rectangle).Tag.BeginAnimation(Button.WidthProperty, ShowButton);
}

显然使用 (sender as button).Tag 作为对象的名称是行不通的。那么如何将标签属性转换为目标对象的引用呢?

注意这是 WPF

谢谢

4

2 回答 2

1

对于 WPF,使用FindName

var oControl = this.FindName((string)(sender as Button).Tag);
if (oControl != null)
{
    (Rectangle)oControl.BeginAnimation...
}

对于 WinForms,您可以通过存储在标记中的名称找到控件:

           

var aoControls = this.Controls.Find((string)(sender as Button).Tag, true);
if ((aoControls != null) && (aoControls.Length != 0))
{
    (Rectangle)aoControls[0].BeginAnimation...
}
于 2012-08-09T15:35:39.333 回答
0

你指的是UIElement.BeginAnimation那个发件人可以是任何人UIElement吗?如果是这样,那么您可以简单地执行以下操作:

((UiElement)sender).BeginAnimation(Button.WidthProperty, ShowButton);
于 2012-08-09T15:52:07.330 回答