C# Silverlight应用程序在向layoutroot添加文本块时冻结
我不明白为什么这个简单的silverlight应用程序会死机。代码如下:C# Silverlight应用程序在向layoutroot添加文本块时冻结,c#,silverlight,C#,Silverlight,我不明白为什么这个简单的silverlight应用程序会死机。代码如下: namespace test { public partial class MainPage : UserControl { TextBlock txtword; public MainPage() { InitializeComponent(); txtword = new TextBlock(); txtword.Text = "TEST";
namespace test
{
public partial class MainPage : UserControl
{
TextBlock txtword;
public MainPage()
{
InitializeComponent();
txtword = new TextBlock();
txtword.Text = "TEST";
LayoutRoot.Children.Add(txtword);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
txtword.Text = "SuperDuper";
}
}
}
文本块添加到layoutroot后,如果您尝试悬停或单击按钮,则可以看出应用程序由于某种原因已冻结。知道这里发生了什么吗
如果在XAML中添加文本块,则可以在单击按钮时更改其文本属性。LayoutRoot.Children.Add()导致应用程序冻结。从您的评论中可以看出,MainPage.XAML中的XAML如下所示:
在code或XAML中添加TextBlock
后,您实际上会得到以下结果:
您的网格
没有指定任何列定义
s或行定义
s,因此,在给定网格的整个宽度和高度的情况下,您有一个1×1的网格,其中包含网格
的所有子控件
由于您的按钮
和文本块
都没有指定z索引值(使用Canvas.ZIndex
),因此它们的z顺序由它们在网格的子对象中的位置定义。文本块
位于按钮
之后,因此它是“位于顶部”的文本块
TextBlock
可能只包含少量文本,但TextBlock
本身仍将填充网格TextBlock
s不会自动调整大小以适应其包含的文本,而不会调整其他内容。您的按钮
似乎不起作用,因为文本块
位于按钮上方并接收所有鼠标事件TextBlock
s是静态控件,对任何鼠标事件都不做任何响应,这应该可以解释为什么你的应用程序看起来冻结了
将文本块
的水平对齐
和/或垂直对齐
设置为拉伸
以外的值将停止文本块
被赋予网格
的整个宽度和高度,并允许按钮
接收鼠标事件。对不起,我不能复制任何冷冻。您使用的是哪个Silverlight版本?哪个Visual Studio版本?您能在多台计算机上重现此问题吗?我使用的是silverlight 5,visual studio 2010,我能够在我的笔记本电脑和工作计算机上产生此问题。@LukeWoodward您没有在XAML中声明textblock,是吗?这对我来说确实有效,但如果我试图在代码中创建并添加textblock,它就不起作用了。编辑:让我换一句话:它确实可以工作,但当文本块显示在屏幕上后,我就不能再与UI交互了。你的布局启动
是网格
?如果是这样,并且TextBlock
位于按钮顶部(请注意,TextBlock
默认情况下将填充网格,即使其文本不会填充网格),则单击的是TextBlock
,而不是按钮。将文本块
的水平对齐
和/或垂直对齐
设置为拉伸
以外的值是否有帮助?MyLayoutRoot
确实是一个网格
,但文本块
不在按钮顶部。但是,当以编程方式添加Textblock
时,就会出现问题。编辑:但是,在c代码中设置文本块的水平和垂直属性后,程序可以工作。这简直让我发疯了,为什么要这么详细地解释呢。这让我很难堪。