C#中的参考TextBlock元素

时间:2013-12-04 07:11:44

标签: c# xaml datatemplate

我的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值。

我做错了什么?如何使用数据模板中的元素?

2 个答案:

答案 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或类似的东西