Tag: xamlreader

尝试设置TextBox.IsReadOnly时出现奇怪的XAML解析错误

我已经设法将其简化为一个简单的测试用例。 使用XamlReader.Parse()解析此XAML期间抛出exception: exception消息是: 无法设置未知成员’System.Windows.Controls.TextBox.IsReadOnly’。 行号“13”和行位置“11”。 如果我没有在TextBox上设置IsReadOnly ,它会解析得很好。 如果我删除样式触发器,它也会解析。 任何人都可以对此有所了解吗? 我对WPF很新。 更新: 这是我用来重现这个的unit testing(它在我的电脑上失败了): [TestMethod] public void TestIsReadOnlyOnTextBox() { // Arrange var xaml = @” “; // Act try { var root = XamlReader.Parse(xaml); } catch (XamlParseException ex) { Assert.Fail(ex.Message); } // If we get here, test passes } 更新2: 我最初只引用了PresentationFramework v4.0.30319。 添加对PresentationCore,System.Xaml和WindowsBase的引用无效。 .NET版本的项目是4(完整,而不是客户端配置文件)。 更新3: Arg,这在ExpressionBlend […]

背景线程中的XamlReader.Load。 可能吗?

WPF应用程序具有使用XamlReader.Load()方法从单独的文件加载用户控件的操作: StreamReader mysr = new StreamReader(pathToFile); DependencyObject rootObject = XamlReader.Load(mysr.BaseStream) as DependencyObject; ContentControl displayPage = FindName(“displayContentControl”) as ContentControl; displayPage.Content = rootObject; 由于文件的大小,该过程需要一些时间,因此UI会冻结几秒钟。 为了保持应用程序响应,我尝试使用后台线程来执行在UI更新中不直接调用的操作部分。 当尝试使用BackgroundWorker我收到一个错误: 调用线程必须是STA,因为许多UI组件都需要这个 所以,我走另一条路: private Thread _backgroundThread; _backgroundThread = new Thread(DoReadFile); _backgroundThread.SetApartmentState(ApartmentState.STA); _backgroundThread.Start(); void DoReadFile() { StreamReader mysr3 = new StreamReader(path2); Dispatcher.BeginInvoke( DispatcherPriority.Normal, (Action)FinishedReading, mysr3); } void FinishedReading(StreamReader stream) { DependencyObject rootObject = […]

将XamlReader用于没有默认构造函数的控件

我有一些Xaml对象的字符串表示,我想构建控件。 我正在使用XamlReader.Parse函数来执行此操作。 对于一个简单的控件,比如Button,默认构造函数不带任何参数,这个工作正常: var buttonStr = “Text”; var button = (Button)XamlReader.Parse(buttonStr); 但是,当我尝试对例如Stroke控件执行此操作时,它会失败。 首先尝试一个简单的空笔画: var strokeStr = “”; var stroke = (Stroke)XamlReader.Parse(strokeStr); 这给出了错误: 无法创建“System.Windows.Ink.Stroke”类型的对象。 CreateInstance失败,这可能是因为没有’System.Windows.Ink.Stroke’的公共默认构造函数。 在Stroke的定义中,我发现它至少需要构造一个StylusPointsCollection。 我假设这是错误告诉我的,虽然有点假设这将由XamlReader处理。 尝试使用StylusPoints转换一个Xaml of Stroke会产生同样的错误: var strokeStr = “” + “” + “” + “” + “” + “”; var stroke = (Stroke) XamlReader.Parse(strokeStr); 我究竟做错了什么? 如何告诉XamlReader如何正确创建笔划?