我正在尝试创建一个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作为对象的名称将不起作用。那么如何将tag属性转换为目标对象的引用呢?
注意这是WPF
由于
答案 0 :(得分: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...
}
答案 1 :(得分:0)
您是否引用UIElement.BeginAnimation
并且发件人可以是UIElement
?如果是这样,那么你可以简单地做:
((UiElement)sender).BeginAnimation(Button.WidthProperty, ShowButton);