因此,在我的页面中,我添加了一个Pivot。我将Pivot命名为MainPivot。在MainPivot中,我编辑了Title Template。在TitleTemplate中,我添加了2个TextBlocks。一个叫做AppTitle,另一个叫做UserText
我想要做的是使用C#设置AppTitle和UserText的文本。为此,我设法从this link获得了VisualTreeHelper。虽然它是“如何在ListBox中访问”,但我添加了一些更改,以查看它是否有效。
所以我的代码。用于已编辑的MainPivot的XAML
<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);
有谁能帮帮我吗?我所要做的就是访问这两个文本块并更改文本。谢谢!
发布于 2014-03-02 07:52:56
为什么要把它当做模板呢?
为什么不直接设置标题呢
<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>,并在后台代码中直接访问TextBlocks。
AppTitle.Text = "APPLICATION TITLE";
UserText.Text = "USER TEXT";https://stackoverflow.com/questions/22121817
复制相似问题