所以,在我的页面中我添加了一个Pivot。我将Pivot命名为MainPivot
。在MainPivot
内,我编辑了Title Template
。在TitleTemplate中,我添加了2个TextBlocks。一个称为AppTitle
,另一个称为UserText
我想要做的是使用AppTitle
设置UserText
和C#
的文本。为此,我设法从this link获取了VisualTreeHelper
。虽然它的“如何访问ListBox内部”我添加了一些更改,看看它是否有效。
所以我的代码。
已编辑的MainPivot
:
<DataTemplate x:Key="MainPivotEditedTemplate">
<StackPanel x:Name="Stak" Orientation="Vertical" Width="0">
<TextBlock x:Name="AppTitle" HorizontalAlignment="Left" TextWrapping="NoWrap" Width="443" Margin="0,0,-443,0" FontSize="22"/>
<TextBlock x:Name="UserText" HorizontalAlignment="Left" TextWrapping="NoWrap" Width="443" Margin="0,0,-443,0" FontFamily="Segoe WP SemiLight" FontSize="23"/>
</StackPanel>
</DataTemplate>
以下是VisualTreeHelper
的代码:
private T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
var count = VisualTreeHelper.GetChildrenCount(parentElement);
if (count == 0)
return null;
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child != null && child is T)
{
return (T)child;
}
else
{
var result = FindFirstElementInVisualTree<T>(child);
if (result != null)
return result;
}
}
return null;
}
以下是用于更改TextBlock文本的代码:
public MainMenu()
{
InitializeComponent();
Pivot apptitle = this.MainPivot.ItemContainerGenerator.ContainerFromIndex(0) as Pivot;
Pivot usertext = this.MainPivot.ItemContainerGenerator.ContainerFromIndex(1) as Pivot;
TextBlock _apptitle = FindFirstElementInVisualTree<TextBlock>(apptitle);
TextBlock _usertext = FindFirstElementInVisualTree<TextBlock>(usertext);
_apptitle.Text = "APPLICATION TITLE";
_usertext.Text = "USER TEXT";
}
现在我的问题是,当我调试应用程序时,它给出了一个错误说:
Reference is not a valid visual DependencyObject.
并在VisualTreeHelper方法中显示此行:
var count = VisualTreeHelper.GetChildrenCount(parentElement);
任何人都可以帮助我吗?我想要做的就是访问这两个文本块并更改文本。谢谢!
答案 0 :(得分:1)
为什么它真的是模板?
为什么不设置标题
<phone:Pivot.Title>
<StackPanel Name="Stak" Orientation="Vertical" Width="0">
<TextBlock Name="AppTitle" HorizontalAlignment="Left" TextWrapping="NoWrap" Width="443" Margin="0,0,-443,0" FontSize="22"/>
<TextBlock Name="UserText" HorizontalAlignment="Left" TextWrapping="NoWrap" Width="443" Margin="0,0,-443,0" FontFamily="Segoe WP SemiLight" FontSize="23"/>
</StackPanel>
</phone:Pivot.Title>
并直接在
后面的代码中访问TextBlocksAppTitle.Text = "APPLICATION TITLE";
UserText.Text = "USER TEXT";