如何在使用集线器时从CB访问控件-Windows Phone 8.1
本文关键字:控件 访问 -Windows Phone CB 集线器 | 更新日期: 2023-09-27 18:30:01
我正在Windows Phone 8.1和我想从Code Behind获得对控件的访问权限。
通常情况下,一切都很好,但当我使用hub时,我无法访问CodeBehind中的字段。
<Hub x:Name="RHub">
<HubSection>
<DataTemplate>
<Grid>
<TextBox x:Name="Test5"/>
</Grid>
</DataTemplate>
</HubSection>
<HubSection>
<DataTemplate>
<Grid>
</Grid>
</DataTemplate>
</HubSection>
</Hub>
现在在CodeBehind文件中并没有像Test5这样的字段,只有RHub。
这是因为控件位于DataTemplate内部。绕过这个限制的一个简单方法是挂接Element Loaded事件。这是XAML:
<HubSection Header="Trailers">
<DataTemplate>
<ListView x:Name="MovieTrailers" Loaded="MovieTrailers_Loaded">
</ListView>
</DataTemplate>
</HubSection>
以及背后的代码:
private void MovieTrailers_Loaded(object sender, RoutedEventArgs e)
{
var listView = (ListView)sender;
listView.ItemsSource = trailers;
}
如果你想在列表视图中搜索任何元素,你可以使用这样的方法:
public static DependencyObject FindChildControl<T>(DependencyObject control, string ctrlName)
{
int childNumber = VisualTreeHelper.GetChildrenCount(control);
for (int i = 0; i < childNumber; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(control, i);
FrameworkElement fe = child as FrameworkElement;
// Not a framework element or is null
if (fe == null) return null;
if (child is T && fe.Name == ctrlName)
{
// Found the control so return
Debug.WriteLine("Achou");
return child;
}
else
{
// Not found it - search children
DependencyObject nextLevel = FindChildControl<T>(child, ctrlName);
if (nextLevel != null)
return nextLevel;
}
}
return null;
}
和搜索:
private void findRectangle(ListView listView)
{
Rectangle ret = this.FindChildControl<Rectangle>(listView, "ret1") as Rectangle;
if(ret != null)
{
ret.Fill = new SolidColorBrush(this.color);
}
}