This is my xaml code, a NavigationView
contains a NavigationView.HeaderTemplate
.
<NavigationView.HeaderTemplate>
<DataTemplate
x:Name="HeaderDataTemplate">
<TextBlock
Name="HeaderText"
Text="I am a TextBlock"
Margin="0,0,0,10"/>
</DataTemplate>
</NavigationView.HeaderTemplate>
I want to know how to get the Texkblock
through c# code.
Here is my c# code bu it doesn't work.
private void nvSample_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
{
var navView = sender as NavigationView;
NavigationViewItem item = args.SelectedItemContainer as NavigationViewItem;
if(item.Tag.ToString() == "SatrtPage")
{
DataTemplate dataTemplate = sender.HeaderTemplate;
DependencyObject dio = dataTemplate.LoadContent();
var rectangle= FindVisualChild<TextBlock>(dio);
if (rectangle != null)
{
rectangle.Text = "LLLLLLL";
}
contentFrame.Navigate(typeof(StartPage));
}
private childItem FindVisualChild<childItem>(DependencyObject obj)
where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
{
return (childItem)child;
}
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
Try this:
private void nvSample_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
{
var navView = sender as NavigationView;
if (FindVisualChild<SplitView>(navView) is SplitView splitView
&& splitView.Content is Panel panel
&& panel.Children.OfType<ContentControl>().FirstOrDefault() is ContentControl cc)
{
var textBlock = FindVisualChild<TextBlock>(cc);
if (textBlock != null)
textBlock.Text = "changed text...";
}
}