Xaml TextBox not behaving



我正在尝试在运行时使用类似的东西从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控件中工作。

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

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

这只是一个偶然的机会,但你是否尝试过将动态创建的内容添加为静态"MainPage.xaml"网格的子级,而不是RootVisual?

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

最新更新