1

我已将按钮动态添加到列表框中。我正在使用那个按钮,我必须知道这个按钮的位置。

我有这个方法:

private void addNewButton_Click(object sender, RoutedEventArgs e)
    {
        if(sender.GetType().IsSubclassOf(typeof(Control)))
        {
            Control formControl = (Control)sender;
            switch (formControl.Name)
            {
                case "addSound20":
                case "addSound21":
                case "addSound23":
                case "addSound24":
                case "addSound25":
                case "addSound26":
                    MessageBox.Show("test: " + formControl.Name);
                    // there I need to know, where is this button located
                    break;
                default:
                    MessageBox.Show("exception: default");
                    break;
            }
        }
    }

如何找到按钮的源对象?

编辑:我在 mainWindow 中有一些 ListBox - 我需要知道哪个 ListBox 包含我正在使用的那个 Button。每个对象都有特定的名称 - 例如“button20”、“listBox22”等。

4

2 回答 2

2

从您上一条评论来看,您可以投射和使用Parent

((ListBox)formControl.Parent).Items.Remove(formControl);

注意:Parent 可以返回 null 你不妨检查一下

formControl.Parent != null && formControl.Parent is ListBox

于 2013-09-16T13:50:59.450 回答
0

您可以使用 VisualTreeHelper 查找任何控件的父级...下面的方法可以帮助您..

        public static T FindAncestor(DependencyObject dependencyObject)
            where T : DependencyObject
        {
            var parent = VisualTreeHelper.GetParent(dependencyObject);

            if (parent == null) return null;

            var parentT = parent as T;
            return parentT ?? FindAncestor(parent);
        }

你可以像这样调用这个方法LisBox lisbox = FindAncestor(formControl);

于 2013-09-16T12:55:45.817 回答