gpt4 book ai didi

c# - 获取DataTemplate控件里面的控件

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:53 25 4
gpt4 key购买 nike

我有以下用于 Windows 8.1 的中心应用程序的 XAML 代码:

<HubSection Width="780" Margin="0,0,80,0">
<HubSection.Background>
<ImageBrush ImageSource="Assets/MediumGray.png" Stretch="UniformToFill" />
</HubSection.Background>
<DataTemplate>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<m:Map Credentials="YOUR_BING_MAPS_KEY">
<m:Map.Children>
<!-- Data Layer-->
<m:MapLayer Name="DataLayer"/>

<!--Common Infobox-->
<m:MapLayer>
<Grid x:Name="Infobox" Visibility="Collapsed" Margin="0,-115,-15,0">
<Border Width="300" Height="110" Background="Black" Opacity="0.8" BorderBrush="White" BorderThickness="2" CornerRadius="5"/>

</Grid>
</m:MapLayer>
</m:Map.Children>
</m:Map>
</Grid>

</DataTemplate>
</HubSection>

问题是我无法访问 MapLayer 和 c# 页面中的 Grid 控件。(仅当 XAML 位于 DataTepmlate 控件内时才会出现此问题)。我如何获得此访问权限?

最佳答案

您应该使用 VisualTreeHelper 方法。这只是我正在使用的一些代码。我认为您可以根据自己的需要轻松调整它。

首先将 FindElementByName 方法放入您的代码隐藏文件中:

public T FindElementByName<T>(DependencyObject element, string sChildName) where T : FrameworkElement
{
T childElement = null;
var nChildCount = VisualTreeHelper.GetChildrenCount(element);
for (int i = 0; i < nChildCount; i++)
{
FrameworkElement child = VisualTreeHelper.GetChild(element, i) as FrameworkElement;

if (child == null)
continue;

if (child is T && child.Name.Equals(sChildName))
{
childElement = (T)child;
break;
}

childElement = FindElementByName<T>(child, sChildName);

if (childElement != null)
break;
}
return childElement;
}

现在您可以开始使用该方法了。像这样将事件处理程序添加到您的 MapLayer 或您的 map :

<m:MapLayer Name="DataLayer" Loaded="DataLayerLoaded" />

在您的处理程序中,您现在可以使用这样的代码访问元素(您可能需要调整它,因为我对 Hubsection 控件不太熟悉):

this.UpdateLayout();
// Give your hub a name using x:Name=
var item = [..] // Retrieve your hubsection here!
var container = this.MyHubSection.ContainerFromItem(item);
// NPE safety, deny first
if (container == null)
return;
var datalayer = FindElementByName<MapLayer>(container, "DataLayer");
// And again deny if we got null
if (datalayer == null)
return;
/*
Start doing your stuff here.
*/

关于c# - 获取DataTemplate控件里面的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26258512/

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