XAML- XMLPARSEEXCEPTION을 던지는 MERGEDDICIONARIES“항목이 이미 추가되었습니다”. 왜요?
-
19-09-2019 - |
문제
다음과 같은 문제를 재현하기가 매우 쉽습니다. 다른 파일의 리소스를 사용하는 XAML 응용 프로그램을 만들고 있습니다. 가는 길은 다음과 같이 지역 및 글로벌 자원을 병합하기 위해 합병 된 데이터 타그를 만드는 것입니다.
<Window>
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="path.to.xaml.file"/>
<ResourceDictionary>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
....
</Window>
이 작은 코드 조각은 실행하면 충돌합니다.
Item has already been added. Key in dictionary: 'System.Windows.Controls.Border' Key being added: 'System.Windows.Controls.Border'
mengeddictionaries-tag를 제거하면 코드가 예상대로 실행됩니다.
<Window>
<Window.Resources>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</Window.Resources>
</Window>
병합 된 리소스를 사용할 때 왜 예외가 발생하는지 이해하지 못합니다. 물론, 지금은 수정이 충분히 쉽습니다 (리소스를 더 낮은 수준으로 옮기십시오). 이것이 '정상적인'행동인지 아는 것이 좋을 것입니다 ...
해결책
리소스가 별도의 파일에 있지 않은 경우 병합 사전의 일부가되어서는 안됩니다. 다음과 같이 외부로 이동하십시오.
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="path.to.xaml.file"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</ResourceDictionary>
</Window.Resources>
즉, 오류 메시지는 약간 오해의 소지가 있으며 XAML 컴파일러의 버그의 결과 일 수 있습니다.
제휴하지 않습니다 StackOverflow