【发布时间】:2013-05-15 18:19:32
【问题描述】:
我正在尝试在运行时从 XAML 创建 UI,类似于
private void Application_Startup (object esender, StartupEventArgs e)
{
this.RootVisual = (UIElement)(XmlReader.Load(e.InitParams["Xaml"])
如果我输入这个 XAML:
<Canvas
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sdk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls">
<StackPanel>
<TextBox Width="120" Margin="8" Text="Edit Me" />
<CheckBox Margin="8">Normal</CheckBox>
<ComboBox Margin="8" Width="120" SelectedIndex="1">
<ComboBoxItem Content="First Normal Item" />
<ComboBoxItem Content="Second Normal Item" />
</ComboBox>
</StackPanel>
</Canvas>
然后复选框和列表按预期运行,但我的 TextBox 不响应输入,它保持其初始值。 (对我来说)真正奇怪的部分是,如果我将 KeyDown 的处理程序放在 RootVisual 上,并在那里显示一个消息框,它就可以工作。如果我有一个空的处理程序或没有处理程序,它就没有。
我是否需要为某些事件设置一些显式处理?如果是,是哪些,我该如何处理?
更新:按照建议,我尝试将动态标记放入新应用的 MainPage 中,如下所示:
public MainPage()
{
InitializeComponent();
var dynamic = XamlReader.Load(xaml);
this.LayoutRoot.Children.Add(dynamic as UIElement);
}
其中xaml 是一个包含上述内容的字符串文字,其他一切都是VS2010 向导离开它的方式。这样可行。但我看不出有效的区别是什么。
更新更新:这是一条红鲱鱼;不同的是环境。它适用于 VS,但不适用于我在实际应用中使用的 Silverlight ActiveX 控件。
【问题讨论】:
-
哎呀,我愿意。括号也在实际代码中排列:)
-
附注:
var dynamic = XamlReader.Load(xaml);让我困惑了几秒钟...请仔细选择变量名。 -
我没有意识到这是一个保留字。至少我今天学到了一件事。
-
这并没有错,只是令人困惑:将返回通过paring字符串创建的对象的方法的结果分配给名为dynamic的变量,其类型由编译器使用var确定。 ..
标签: c# silverlight xaml