使用Tag属性来定位对象c#

时间:2012-08-09 15:30:19

标签: c# wpf events tags

我正在尝试创建一个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

由于

2 个答案:

答案 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);