繁体   English   中英

WP7在pivotitem的头部内找到控件

[英]WP7 find control inside header of pivotitem

对于我的WP7应用程序,我需要找到一个日期控件,我已将其放置在pivotitem的标题模板中。 如何在当前所选PivotItem的代码中访问此datepicker控件?

public static T FindName<T>(string name, DependencyObject reference) where T : FrameworkElement
{
    if (string.IsNullOrEmpty(name))
    {
        throw new ArgumentNullException("name");
    }

    if (reference == null)
    {
        throw new ArgumentNullException("reference");
    }

    return FindNameInternal<T>(name, reference);
}

private static T FindNameInternal<T>(string name, DependencyObject reference) where T : FrameworkElement
{
    foreach (DependencyObject obj in GetChildren(reference))
    {
        T elem = obj as T;

        if (elem != null && elem.Name == name)
        {
            return elem;
        }

        elem = FindNameInternal<T>(name, obj);

        if (elem != null)
        {
            return elem;
        }
        else
        {
            //if (obj.GetType().FullName == "System.Windows.Controls.DataField")
            //    elem = (obj as DataField).Content as T;

            if (elem != null && elem.Name == name)
                return elem;
        }
    }
    return null;
}

private static IEnumerable<DependencyObject> GetChildren(DependencyObject reference)
{
    int childCount = VisualTreeHelper.GetChildrenCount(reference);

    if (childCount > 0)
    {
        for (int i = 0; i < childCount; i++)
        {
            yield return VisualTreeHelper.GetChild(reference, i);
        }
    }
}

我不知道有任何真正好的解决方案。 我想我最初的想法是为什么你需要引用DatePicker对象? 但我想你有理由。

一个可能的解决方案:
您可以使用VisualTreeHelper遍历透视项目中的可视树,并在找到正确类型的对象(DatePicker)时停止。 创建一个这样的辅助函数:

private static DependencyObject GetDependencyObjectFromVisualTree(DependencyObject startObject, Type type)
{
    DependencyObject parent = startObject;

    while (parent != null)
    {
        if (type.IsInstanceOfType(parent))
            break;

        parent = VisualTreeHelper.GetParent(parent);
    }

    return parent;
}

然后使用PivotItem作为DependencyObject,typeof(DatePicker)作为类型调用它,最后将返回的DependencyObject强制转换为DatePicker。

HTH

常规的父/子关系对于Pivot控件不起作用。 您可以做的是直接在PivotItem中搜索DatePicked组件:

((DatePicker)((PivotItem)MainPivot.SelectedItem).FindName("DateControl"))

MainPivot是Pivot控件。 我通过SelectedItem获取当前选中的项目 - 注意我将它直接投射到PivotItem ,否则我得到一个对象 然后我正在寻找一个名为DateControl的控件,因为你为它设置了一个x:Name

在此之后需要完成的所有操作是将对象强制转换DatePicker并以与对任何其他控件相同的方式访问其属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM