循环一个元素变量名

本文关键字:一个 元素 变量名 循环 | 更新日期: 2023-09-27 18:16:08

我尝试在WPF应用程序中循环我的食物对象的名称。

我想要fooelement的以下名称:food0, food1, foot2…

for (int i = 0; i < foods.Count; i++)
{
    System.Windows.UIElement foodelement = "food" + i; // ERROR here
    Canvas.SetLeft(foodelement, foods[i].Position.X);
}

我得到错误:Cannot implicitly convert type string to System.Windows.UIElement

循环一个元素变量名

这可能对你有帮助

System.Windows.UIElement foodelement = (System.Windows.UIElement)YourContainer.FindName("food" + i);

其中YourContainer是保存ui元素的容器(grid/canvas/stack panel/)。

或者你可以用以下方式:

 System.Windows.UIElement foodelement = UIHelper.FindChild<System.Windows.UIElement>(Application.Current.MainWindow, "food" + i);

我想下面的代码会对你有所帮助

/// <summary>
/// Finds a Child of a given item in the visual tree. 
/// </summary>
/// <param name="parent">A direct parent of the queried item.</param>
/// <typeparam name="T">The type of the queried item.</typeparam>
/// <param name="childName">x:Name or Name of child. </param>
/// <returns>The first parent item that matches the submitted type parameter. 
/// If not matching item can be found, 
/// a null parent is being returned.</returns>
public static T FindChild<T>(DependencyObject parent, string childName)
   where T : DependencyObject
{
    // Confirm parent and childName are valid. 
    if (parent == null) return null;
    T foundChild = null;
    int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
    for (int i = 0; i < childrenCount; i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);
        // If the child is not of the request child type child
        T childType = child as T;
        if (childType == null)
        {
            // recursively drill down the tree
            foundChild = FindChild<T>(child, childName);
            // If the child is found, break so we do not overwrite the found child. 
            if (foundChild != null) break;
        }
        else if (!string.IsNullOrEmpty(childName))
        {
            var frameworkElement = child as FrameworkElement;
            // If the child's name is set for search
            if (frameworkElement != null && frameworkElement.Name == childName)
            {
                // if the child's name is of the request name
                foundChild = (T)child;
                break;
            }
        }
        else
        {
            // child element found.
            foundChild = (T)child;
            break;
        }
    }
    return foundChild;
}

使用这个方法

  for (int i = 0; i < foods.Count; i++)
       {
        System.Windows.UIElement ui = FindChild<Button>(Application.Current.MainWindow, "food" + i);
       }