XAML- XMLPARSEEXCEPTION을 던지는 MERGEDDICIONARIES“항목이 이미 추가되었습니다”. 왜요?

StackOverflow https://stackoverflow.com/questions/2040804

문제

다음과 같은 문제를 재현하기가 매우 쉽습니다. 다른 파일의 리소스를 사용하는 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 컴파일러의 버그의 결과 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top