C# WP8 silverlight:can';在数据模板中找不到文本块

C# WP8 silverlight:can';在数据模板中找不到文本块,c#,xaml,windows-phone-8,windows-phone,silverlight-toolkit,C#,Xaml,Windows Phone 8,Windows Phone,Silverlight Toolkit,我知道这个问题肯定已经问过了,但我找不到任何有用的答案 我有一个工具箱的CustomMessageBox,与此Microsoft示例非常相似: CustomMessageBox messageBox = new CustomMessageBox() { ContentTemplate = (DataTemplate)this.Resources["myContentTemplate"], LeftButtonContent = "s

我知道这个问题肯定已经问过了,但我找不到任何有用的答案

我有一个工具箱的CustomMessageBox,与此Microsoft示例非常相似:

CustomMessageBox messageBox = new CustomMessageBox()
        {
            ContentTemplate = (DataTemplate)this.Resources["myContentTemplate"],
            LeftButtonContent = "speak",
            RightButtonContent = "read it",
            IsFullScreen = false 
        };

        messageBox.Dismissed += (s1, e1) =>
        {
            switch (e1.Result)
            {
                case CustomMessageBoxResult.LeftButton:
                    // Do something.
                    break;
                case CustomMessageBoxResult.RightButton:
                    // Do something.
                    break;
                case CustomMessageBoxResult.None:
                    // Do something.
                    break;
                default:
                    break;
            }
        };

        messageBox.Show();
messagebox内容在DataTemplate中定义,以表示:

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="myContentTemplate">
        <TextBlock x:Name="myTextBlock" />
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

如何通过代码隐藏设置
myTextBlock.Text

它说
myTextBlock
在名称空间中不存在


它在WinRT应用程序中确实有效,但在Silverlight中不起作用…

我建议您将TextBlock.Text改为数据绑定。但如果你真的想穿越那个物体。您需要从该消息框派生一个自定义消息框,并且在OnApplyTemplate上,您可以使用GetTemplateChild()非常轻松地获得子消息框

但如果您想以艰难的方式完成此任务:您可以使用VisualTreeHelper,事实上有人已经为您编写了一个很好的遍历函数:


您的绑定问题解决方案

示例绑定类

public类主视图模型:INotifyPropertyChanged
{
私有字符串_messagebox_text=“”;
公共字符串messagebox\u文本
{
得到
{
返回消息框文本;
}
设置
{
_messagebox_text=值;
NotifyPropertyChanged(“messagebox_text”);
}
}
公共事件属性更改事件处理程序属性更改;
私有void NotifyPropertyChanged(字符串propertyName)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(null!=处理程序)
{
处理程序(这是新的PropertyChangedEventArgs(propertyName));
}
}
}
然后,您的数据模板将更改为:


然后需要正确设置DataContext。诀窍在于,在处理DataTemplate时,DataContext实际上是在内容中设置的

所以把它们放在一起

MainViewModel\u mvm=new MainViewModel();
_mvm.messagebox_text=“what ever”;
messageBox=新建CustomMessageBox()
{
ContentTemplate=(DataTemplate)this.Resources[“myContentTemplate”],
LeftButtonContent=“说话”,
RightButtonContent=“阅读它”,
IsFullScreen=false
};
messageBox.Content=\u mvm;//确定界限

我花了数小时试图将其绑定到局部变量。。。但它不起作用。如果我把它放在页面的任何地方,它会显示分数,但在那个消息框中,它什么也不显示……是的,我理解你的沮丧。我修改了解决方案以添加正确数据绑定的方式。