我正在开发一个项目,我必须通过ILSpy从反编译代码构建。当我尝试编译XAML代码时,我收到此错误:
The attribute 'ConnectionId' from the XAML namespace is not defined.
XAML的标题部分定义如下:
<UserControl x:Class="..." Name="..." Loaded="..." SizeChanged="..."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vtbc="clr-namespace:..."
xmlns:p="clr-namespace:..."
xmlns:local="clr-namespace:...">
虽然XAML背后的类定义如下:
public partial class ... : UserControl
例如以下行引发异常:
<Style x:Key="{x:Type DataGridCell}" TargetType="{x:Type DataGridCell}" x:ConnectionId="16" />
根据我的阅读,它的作用是将数字附加到组件,以便以后可以附加相应的事件处理程序。
任何人都可以提供我可以查看的提示/想法或我可以做些什么来解决这个问题?
部分班级的另一半:
public partial class ... : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector {
我注意到它遗漏了IStyleConnector
(ILSpy计数器部分有它)。
答案 0 :(得分:2)
Property ConnectionId 位于XAML名称空间中,参考解释如下:https://msdn.microsoft.com/de-de/library/system.xaml.xamllanguage.connectionid(v=vs.110).aspx
xaml文件根目录中的定义:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
指的是两个wpf-xaml命名空间(无前缀)和xaml语言(带前缀)。
我从未使用过ConnectionId,但我希望它能够驻留在XAML名称空间中,因为msdn解释了它。 但事实并非如此,这就是为什么你会因为http://schemas.microsoft.com/winfx/2006/xaml中没有定义属性而得到这个错误的原因。
但是在http://schemas.microsoft.com/winfx/2006/xaml/presentation
名称空间。