WPF错误:属性元素不能位于元素的中间';的内容.它们必须在内容之前或之后
本文关键字:元素 或之后 中间 不能 属性 错误 于元素 WPF | 更新日期: 2023-09-27 18:27:36
我在ResourceDictionary
中有一个MergedDictionaries
和DateTemplate
,在添加Converter
:之前一切都很好
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPFTry">
<local:IsEnabledConverter x:Key="isEnabled"/> <===== causes problem
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
<DataTemplate x:Key="fileinfoTemplate" DataType="{x:Type local:MyFileInfo}">
... template stuff
</DataTemplate>
</ResourceDictionary>
添加Converter
行导致DataTemplate
:行出现此错误
Property elements cannot be in the middle of an element's content. They must be before or after the content.
为什么会导致此错误?
请注意,如果我注释掉MergedDictionaries
,代码会编译,转换器也会正常工作。
错误告诉您问题:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPFTry">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
<!-- Move this here -->
<local:IsEnabledConverter x:Key="isEnabled"/>
<DataTemplate x:Key="fileinfoTemplate" DataType="{x:Type local:MyFileInfo}">
... template stuff
</DataTemplate>
</ResourceDictionary>
您试图在设置资源字典的属性之前先放置内容。错误表示"属性元素"(例如ResourceDictionary.MergedDictionaries
)不能位于元素"内容"(例如数据模板/转换器等)的中间
任何带有点.
的内容都必须出现在元素的顶部,因为您本质上是在XAML中设置属性。任何没有.
的内容都是内容,必须出现在任何属性setter下面。
注意:这也适用于其他方式,如果您喜欢的方式,属性也可以位于所有内容下方
如果文件中存在不正确的XAML,则可能会得到相同的错误,这可能并不明显(错误消息不太具体)。
例如,以下情况将产生此错误:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="1"> <!-- delete starting this line to fix -->
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
</Grid> <!-- delete ending this line to fix -->
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="1" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Grid.Row="0" Content="Button1"/>
<Button Grid.Row="1" Content="Button2"/>
<Button Grid.Row="2" Content="Button3"/>
</Grid>
</Grid>
修复方法是删除上面XAML中标记的被阻止的。