我的XAML页面中有一个数据模板,带有数据绑定。此数据模板直接驻留在XAML页面上,不会被其他结构(如GridView或ListView)引用。它不用作ItemTemplate。
<DataTemplate x:Name="Standard250x480ItemTemplate">
<Grid HorizontalAlignment="Left" Width="250" Height="480" Margin="0 0 0 0">
<!--<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}">-->
<Border Background="#ffffff">
<Image Source="{Binding Image}" Stretch="Uniform" AutomationProperties.Name="{Binding Title}" />
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock x:Name="Title" TextAlignment="Center" Padding="0 18 0 0" FontSize="25" Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="60" Margin="15,0,15,0" />
<!--<TextBlock Text="{Binding Subtitle}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>-->
</StackPanel>
</Grid>
</DataTemplate>
这很好用。但是当尝试从XAML页面后面的cs代码调用或引用数据模板中的元素时,会出错。
当我尝试:
public click()
{
var title=Title.Text;
}
无法识别TextBlock。我之前使用过它,它工作正常,但不在数据模板中。
我想在click函数中使用名为“Title”的TextBlock中Text
属性的值,以便我可以将它传递给应用程序中的另一个页面。为此,我需要获取TextBlock的Text值。
我做错了什么?如何使用数据模板中的元素?
答案 0 :(得分:0)
因为标题包含在DataTemplate中,所以无法从后面的代码中引用它。如果您在ListBox中包含此模板,该怎么办?可能有几个Title TextBlocks
为了从代码隐藏中找到您的DataTemplate,您可以使用:
this.TryFindResource("Standard250x480ItemTemplate");
然后您必须将其强制转换为DataTemplate,然后您必须使用VisualTreeHelper或LogicalTreeHelper来查找TextBlock。
最好的解决方案是使用ViewModel对象(我看到你正在使用Text =“{Binding Title}”)。从您的ContentControl中获取ListBox或Content中的Item,您可以将其转换为ViewModel实例,如下所示:
var viewModel = (MyViewModel)listBox.SelectedItem;
var title = viewModel.Title;
答案 1 :(得分:0)
您不能使用标题名称,因为它由演示文稿表单本身使用
为避免将来使用:
TextBoxTitle或类似的东西