XAML WPF父UserControl找不到正在子UserControl中使用资源

vmdwslir  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(359)

我在问题的一部分偶然发现了两个例外。但是,我决定这一个比另一个更重要,这让我有点困惑,所以我将感谢任何帮助摆脱这个错误。
总之,我有一个显示给用户的用户控件,它包含TabControl。对于每个TabItem,我都添加了其他UserControls。其中一个控件显示xaml资源以显示图像(将它们从SVG转换为xaml,因为常规的PNG/etc分辨率看起来不太好)。相同的资源在“原始”UserControl上显示正常,并使用两个路径,并打包uri(这是同一个程序集)似乎在我需要的时候找到&显示资源。不幸的是,当i引用使用父UserControl中的资源的UserControl时,它抛出错误-**'* XDG 0062无法找到资源'global%20objects/pictures/user%20controls/icon. xaml '*'**以及祖父上的资源(原始)UserControl,实际上成功使用了相同的资源。
调试代码后和重建期间,我没有得到错误,两者都没有中断,但它不断重复发生。
我试图显示最少的代码量的东西,实际上看起来是坏的。

图标:(Oracle)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Stretch="Uniform"
             x:Key="Icon">
        <Canvas Name="svg16" Width="512.000000" Height="512.000000">
            <Canvas.RenderTransform>
                <TranslateTransform X="0" Y="0"/>
            </Canvas.RenderTransform>
            <Canvas.Resources/>
            <Canvas Name="g14">
                <Canvas.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="0.100000" ScaleY="-0.100000"/>
                        <TranslateTransform X="0.000000" Y="512.000000"/>
                    </TransformGroup>
                </Canvas.RenderTransform>
                <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path12" Fill="DarkRed">
                    <Path.Data>
                        <PathGeometry Figures="M1440 4169 c-257 -30 -504 -120 -725 -266 -137 -91 -347 -301 -438 -438 -499 -756 -304 -1749 443 -2250 219 -147 462 -234 735 -265 121 -13 2089 -13 2210 0 561 63 1035 390 1282 885 263 525 224 1133 -104 1630 -91 137 -301 347 -438 438 -228 150 -466 236 -740 267 -111 12 -2117 11 -2225 -1z m2173 -574 c621 -94 1021 -708 856 -1316 -30 -113 -118 -282 -197 -379 -162 -200 -401 -336 -659 -375 -145 -22 -1961 -22 -2106 0 -263 40 -499 174 -663 379 -75 93 -164 266 -193 375 -65 239 -44 496 59 718 148 317 447 544 788 598 134 20 1977 21 2115 0z" FillRule="NonZero"/>
                    </Path.Data>
                </Path>
            </Canvas>
        </Canvas>
    </Viewbox>
</ResourceDictionary>

祖父级UserControl:资源

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="\global objects\pictures\user controls\Icon.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

祖父级UserControl:TabControl这里我得到错误的第二个项目<local:ManualMatch/>,但相同的图标显示为标题是好的。

<TabItem>
                <TabItem.Header>
                    <StackPanel Width="auto"
                                Height="auto">
                        <ContentControl Content="{StaticResource Icon}"
                                        Width="50"/>
                    </StackPanel>
                </TabItem.Header>
                <!--element not important-->
            </TabItem>
            <TabItem>
                <local:ManualMatch Margin="0 20"/>
            </TabItem>

父用户控件:ScrollViewer我在这里使用另一个引用相同图标资源的用户控件。上面写的错误在DataTemplate处抛出。资源没有添加到这里,但我尝试了,没有任何帮助。

<ScrollViewer>
        <ItemsControl ItemsSource="{Binding PossibleMatches}">
            <DataTemplate>
                <local:ManualMatchItem/>
            </DataTemplate>
        </ItemsControl>
    </ScrollViewer>

孙级/最低用户控件:资源在这里我尝试了PackUri以及常规路径,两者都能正常工作并显示项目,但错误再次出现。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="\global objects\pictures\user controls\Icon.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

孙级/最低用户控件:ContentControl这也可以正常工作,并且如上所述,显示所有内容,但错误再次出现。

<StackPanel Orientation="Horizontal">
    <ContentControl Content="{StaticResource Icon}"
                    Width="35"/>
</StackPanel>
t1qtbnec

t1qtbnec1#

好吧,我找到了一个解决方案的例外,虽然根据建议,我也从ViewBoxCanvasPath切换到DrawingBrushDrawingGroup
虽然仍然不确定为什么会出现异常,但当我将Grand Child UserControl移到ResourceDictionary时,错误被清除。我也忘记使用ItemsControl.ItemTemplate,但添加它对错误没有影响。

<ScrollViewer>
        <ItemsControl ItemsSource="{Binding PossibleMatches}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <ContentControl Content="{StaticResource ManualMatchItem}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>

相关问题