gpt4 book ai didi

windows-phone-7 - WP7 在 pivoitem 的标题中找到控件

转载 作者:行者123 更新时间:2023-12-04 07:20:23 24 4
gpt4 key购买 nike

对于我的 WP7 应用程序,我需要找到一个日期控件,我已将其放置在数据透视项的标题模板中。如何在当前选定的 PivotItem 后面的代码中访问此日期选择器控件?

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

关于windows-phone-7 - WP7 在 pivoitem 的标题中找到控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4238859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com