循环UIElement变量名称

时间:2015-10-06 10:08:35

标签: c# wpf xaml loops variables

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

我想要以下foodelement的名字: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

2 个答案:

答案 0 :(得分:1)

这可能对您有所帮助

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

其中YourContainer是容纳UIElements的容器(grid / canvas / stack panel /)。

否则您可以使用以下内容:

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

答案 1 :(得分:0)

我认为以下代码可以帮助您

/// <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);
       }