C# WP8 silverlight:can';在数据模板中找不到文本块
我知道这个问题肯定已经问过了,但我找不到任何有用的答案 我有一个工具箱的CustomMessageBox,与此Microsoft示例非常相似: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 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;//确定界限
我花了数小时试图将其绑定到局部变量。。。但它不起作用。如果我把它放在页面的任何地方,它会显示分数,但在那个消息框中,它什么也不显示……是的,我理解你的沮丧。我修改了解决方案以添加正确数据绑定的方式。