标签: xamlreader

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

我已经设法将其简化为一个简单的测试用例.在使用以下方法解析此XAML期间抛出异常XamlReader.Parse():

<DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <DockPanel.Resources>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="IsReadOnly" Value="True">
                    <Setter Property="Background" Value="#FFEEEEEE" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </DockPanel.Resources>


    <TextBox IsReadOnly="True" />
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

异常消息是:

无法设置未知成员'System.Windows.Controls.TextBox.IsReadOnly'.行号'13'和行位置'11'.

如果我不设置IsReadOnlyTextBox,它解析罚款.如果我删除样式触发器,它也会解析.

任何人都可以对此有所了解吗?我对WPF很新.

更新:
这是我用来重现这个的单元测试(它在我的电脑上失败了):

[TestMethod]
public void TestIsReadOnlyOnTextBox()
{
    // Arrange
    var xaml =
@"<DockPanel xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
    <DockPanel.Resources>
        <Style TargetType=""TextBox"">
            <Style.Triggers>
                <Trigger Property=""IsReadOnly"" Value=""True"">
                    <Setter Property=""Background"" Value=""#FFEEEEEE"" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </DockPanel.Resources>


    <TextBox IsReadOnly=""True"" />
</DockPanel>
";

    // Act
    try {
        var root = XamlReader.Parse(xaml);
    }
    catch (XamlParseException ex) …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml xamlreader

22
推荐指数
1
解决办法
5934
查看次数

在WPF应用程序中以编程方式从XAML文件加载矢量图形

我想加载存储为XAML文件的矢量图形(单独的文件,不在字典中),嵌入我的应用程序中,我有几个问题要做:

  1. XAML看起来有点模棱两可,因为它可以用来表示像矢量图像这样的静态资源,或者像WPF中那样动态构建的接口.因此,我不清楚XAML矢量图像的格式:根元素应该是什么,比如svg矢量图像的"svg"标签?目前,我使用Canvas作为顶级元素,因为我想在另一个Canvas中绘制我的图形.

  2. 以编程方式加载这些文件的最佳方法是什么(我的意思是,从xaml文件创建Canvas)?我已经看过(并尝试过)使用XamlReader的不同解决方案,但没有任何效果:应用程序崩溃,调试器没有帮助(我遇到的大多数问题似乎在解析期间发生,并且错误消息不清楚).

我已经阅读http://learnwpf.com/post/2006/06/04/How-do-I-Include-Vector-Based-Image-Resources-in-my-WPF-Application.aspx,但链接到处理资源文件加载的文章已经死亡,图像不是使用C#代码创建的.

c# wpf xaml vector-graphics xamlreader

12
推荐指数
1
解决办法
4692
查看次数

背景线程中的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;
Run Code Online (Sandbox Code Playgroud)

由于文件的大小,该过程需要一些时间,因此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<StreamReader>)FinishedReading,
           mysr3);
 }

 void FinishedReading(StreamReader stream)
    {            
        DependencyObject rootObject = XamlReader.Load(stream.BaseStream) as DependencyObject;
        ContentControl displayPage = FindName("displayContentControl") as ContentControl;
        displayPage.Content = rootObject;
    }
Run Code Online (Sandbox Code Playgroud)

这解决了什么,因为所有耗时的操作都保留在UI线程中.

当我尝试这样做时,在后台进行所有解析:

private Thread _backgroundThread;
_backgroundThread = new …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading xamlreader

8
推荐指数
1
解决办法
2376
查看次数

XamlReader可以加载包含外部程序集中定义的类型的xaml吗?

所述XamlReader加载的Xaml使用而没有任何问题的本地组件和WPF组件内定义的类型.

如果我包含在外部程序集中定义的类型,则抛出带有以下消息的XamlParseException.

无法创建未知类型'{clr-namespace:Telerik.Windows.Controls; assembly = Telerik.Windows.Controls.Charting} SeriesMapping'.' 行号'13'和行位置'18'.

是否可以使用此技术从外部组件加载类型?

wpf xaml xamlreader

8
推荐指数
1
解决办法
4333
查看次数

DataTemplate 内的交互触发器不适用于 XamlReader

我正在尝试使用在代码后面动态创建的(对于 WPF 数据网格)XamlReader.Load()进行解析:DataTemplate

DataTemplate dataTemplate;

StringReader template = new StringReader($@"
<DataTemplate
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
    xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
    xmlns:local=""clr-namespace:MyApp;assembly=MyApp"">
<DataTemplate.Resources>
    <local:ArrayMultiValueConverter x:Key=""arrayMultiValueConverter""/>
</DataTemplate.Resources>
    <StackPanel Orientation=""Vertical"">
        <Expander VerticalAlignment=""Center"" xmlns:i=""http://schemas.microsoft.com/xaml/behaviors"">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName=""IsExpanded"">
                <i:InvokeCommandAction Command=""{{Binding DataContext.TextFilterColumn}}""/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
            <Expander.Header>
                <TextBlock x:Name=""{dtColumnName}"" VerticalAlignment=""Center"" Text=""{{TemplateBinding Content}}"" Margin=""5,5,5,0"" FontWeight=""SemiBold""/>
            </Expander.Header>
            <StackPanel Orientation=""Horizontal"">
                <TextBox x:Name=""{"TbxFilter" + dtColumnName}"" Width=""100"" Margin=""5""/>
                <TextBlock Margin=""0,0,5,0"" VerticalAlignment=""Center"" FontFamily=""Segoe MDL2 Assets"">
                    <Hyperlink TextDecorations=""{{x:Null}}"" Command=""{{Binding DataContext.FilterColumnName, RelativeSource={{RelativeSource FindAncestor, AncestorType={{x:Type Window}}}}}}"">
                        <Hyperlink.CommandParameter>
                            <MultiBinding Converter=""{{StaticResource arrayMultiValueConverter}}"">
                                <Binding Path=""Text"" ElementName=""{dtColumnName}"" />
                                <Binding Path=""Text"" ElementName=""{"TbxFilter" + dtColumnName}"" />
                            </MultiBinding> …
Run Code Online (Sandbox Code Playgroud)

c# wpf eventtrigger xamlreader

8
推荐指数
1
解决办法
1624
查看次数

C#属性XmlIgnore和XamlWriter类 - XmlIgnore无法正常工作

我有一个类,包含Brush MyBrush标记为的属性[XmlIgnore].然而,它在流中被序列化,在尝试读取时会导致麻烦XamlReader.

我做了一些测试,例如当改变Property的可见性(到内部)时,它在流中消失了.不幸的是,我不能在我的特定场景中这样做.

  1. 有没有人有同样的问题?
  2. 你有没有办法解决这个问题?

备注:据我所知,C#4.0

这是我的单元测试中的一个方法,我在那里测试XamlSerialization:

            // buffer to a StringBuilder
            StringBuilder sb = new StringBuilder();
            XmlWriter writer = XmlWriter.Create(sb, settings);
            XamlDesignerSerializationManager manager = new XamlDesignerSerializationManager(writer) {XamlWriterMode = XamlWriterMode.Expression};

            XamlWriter.Save(testObject, manager);
            xml = sb.ToString();
            Assert.IsTrue(!String.IsNullOrEmpty(xml) && !String.IsNullOrEmpty(xml), "Xaml Serialization failed for " + testObject.GetType() + " no xml string available");

            xml = sb.ToString();
            MemoryStream ms = xml.StringToStream();
            object root = XamlReader.Load(ms);
            Assert.IsTrue(root != null, "After reading from MemoryStream no result for …
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0 xamlreader xmlignore

7
推荐指数
1
解决办法
4543
查看次数

绑定不适用于动态加载的xaml

我正在XamlReader成功使用加载xaml文件并创建一个FrameworkElement可以使用的文件.

我正在加载的xaml中包含绑定表达式,例如:

<TextBlock Text="{Binding DataContextTextProperty}" />
Run Code Online (Sandbox Code Playgroud)

如果我将FrameworkElement放回到XamlReader.Load()WPF窗口,那么绑定一切正常.

但是,在这种情况下,我正在使用Laurent Bugnion关于从WPF/XAML创建PNG的优秀文章.由于结果XamlReader.Load()是通过a直接写入PNG VisualBrush,因此似乎绕过了WPF调用绑定表达式的必要机制.

这让我相信实际的绑定并不是真的只是通过调用来调用XamlReader.Load(),或者它们因为我不知道的事情而不能正常工作,直到你添加FrameworkElement到一个可视树.现有的视觉树或其他东西.

我可以做些什么来确保调用这些绑定吗?

提前谢谢了.

c# wpf xaml binding xamlreader

6
推荐指数
1
解决办法
2660
查看次数

Silverlight 4.0:DataTemplate错误

我试图在我的资源字典中获取特定模板.这是我的资源字典

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:view="clr-namespace:Test.Layout.View"
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"  
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><DataTemplate x:Key="LeftRightLayout">
    <toolkit:DockPanel>
        <view:SharedContainerView toolkit:DockPanel.Dock="Left"/>
        <view:SingleContainerView toolkit:DockPanel.Dock="Right"/>
    </toolkit:DockPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

但是当它到达XamlReader.Load时

private static ResourceDictionary GetResource(string resourceName)
    {
        ResourceDictionary resource = null;

        XDocument xDoc = XDocument.Load(resourceName);
        resource = (ResourceDictionary)XamlReader.Load(xDoc.ToString(SaveOptions.None));

        return resource;
    }
Run Code Online (Sandbox Code Playgroud)

找不到"SharedContainerView"类型,因为"clr-namespace:Test.Layout.View"是一个未知的命名空间.[线:4位置:56]

xaml datatemplate resourcedictionary xamlreader silverlight-4.0

5
推荐指数
1
解决办法
1279
查看次数

XamlReader生成DataTemplate的问题

我正在尝试在我的WPF项目中实现下面的代码,以便为具有动态列的DataGrid动态生成DataTemplates.我在这里找到了StackOverflow上的代码

public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}
Run Code Online (Sandbox Code Playgroud)

但是,在XamlReader.Load代码上,我收到错误"无法从'string'转换为'System.Xaml.XamlReader'.

我试图通过将代码更改为:

return (DataTemplate)XamlReader.Load(XmlReader.Create(
Run Code Online (Sandbox Code Playgroud)

但是我在字符串中传递无效字符时遇到错误.

另外,我不确定如何将TextBlock传递给此代码.我想我会创建一个TextBlock并将其作为Type参数传递,但我得到错误"无法从'System.Windows.Controls.TextBlock'转换为'System.Type'

任何帮助赞赏.

silverlight wpf xaml datatemplate xamlreader

5
推荐指数
1
解决办法
6936
查看次数

成功引用 XamlReader.Load() 加载的文件中的 ResourceDictionary

我正在构建一个通用的 WP7 程序集,它将显示我的应用程序的通用帮助/有关信息,每个应用程序程序集将指定一对 StackPanel,其中包含一些应用程序特定的信息(我们称为 Legal.xaml 和 WhatsNew.xaml)。

\n\n

理想情况下,这些应用程序特定的 XAML 文件应采用纯文本形式(而不是在代码中实例化的内容),以便可通过 HTTP 加载或作为嵌入式资源字符串加载。

\n\n

加载 XAML 工作正常,直到我尝试将某些样式定义分解到另一个文件中,然后 XamlReader.Load() 失败并显示以下注释: \xe2\x80\x9cAttribute AboutPageDocs/CommonStyles.xaml 值超出范围。[行:43 位置:45]\xe2\x80\x9d

\n\n

加载 Legal.xaml 时会发生该错误,当我们环顾四周时,如 43,我们发现我试图加载现在包含自定义样式的 ResourceDictionary:

\n\n
<StackPanel.Resources>\n    <ResourceDictionary>\n        <ResourceDictionary.MergedDictionaries>\n            <ResourceDictionary Source="AboutPageDocs/CommonStyles.xaml"/>\n        </ResourceDictionary.MergedDictionaries>\n    </ResourceDictionary>\n</StackPanel.Resources>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是错误的...如果简单地复制并粘贴 StackPanel 代码(在运行时动态加载)并将其放入 UserControl 中...一切工作正常。

\n\n

不需要在 Legal.xaml 和 WhatsNew.xaml 中内联定义我的样式...有没有办法让 XamlReader.Load() 属性查找 CommonStyles.xaml?

\n\n

考虑到源路径不正确,我尝试通过两个程序集将 CommonStyles.xaml 的副本放置在不同位置...并尝试使用 pack:// uri 语法...到目前为止都无济于事。

\n\n

我缺少什么?

\n

xaml resourcedictionary xamlreader windows-phone-7

5
推荐指数
1
解决办法
1047
查看次数