Xaml TextBox不表现

时间:2012-02-09 17:21:43

标签: c# silverlight xaml

我正在尝试在运行时从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上,并在那里显示一个消息框,它就可以了。如果我有一个空的处理程序或没有处理程序,它没有。

我是否需要为某些事件设置一些明确的处理?如果是,那些,我该如何处理?

Upadate:正如建议的那样,我尝试将动态标记放入新应用的主页中,如下所示:

    public MainPage()
    {
        InitializeComponent();
        var dynamic = XamlReader.Load(xaml);
        this.LayoutRoot.Children.Add(dynamic as UIElement);
    }

其中xaml是一个包含上述内容的字符串文字,其他一切都是VS2010向导离开它的方式。这样可行。但我看不出有效的区别是什么。

更新更新:这是一个红鲱鱼;不同的是环境。它适用于VS,但不适用于我在真实应用程序中使用的Silverlight ActiveX控件。

2 个答案:

答案 0 :(得分:0)

您是否在根元素上定义了根命名空间?

      <param name="initParams" value="xaml=&lt;TextBox xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Text='hi'/&gt;" />

这里只是一个黑暗的镜头,但您是否尝试将动态创建的内容添加为静态“MainPage.xaml”网格的子项而不是RootVisual?

答案 1 :(得分:0)

检查主XAML文件中的IsEnabled="True"属性,如果它设置为false,则控件将无法编辑。