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



我在问题的一部分偶然发现了两个异常。但是,我认为这一个比另一个更重要,这让我有点困惑,所以我很感激任何帮助来消除这个错误。

总之,我向用户显示了一个具有TabControl的用户控件。在每个CCD_ 2中,我添加了其他CCD_。其中一个控件显示xaml资源以显示图像(将它们转换为SVG,然后转换为xaml,因为常规的PNG/etc分辨率看起来不太好(。相同的资源在'original'UserControl上显示正常,并且使用path和pack-uri(这是同一个程序集(似乎可以找到&需要时显示资源。不幸的是,当我引用使用父级UserControl中相应资源的UserControl时,它会抛出错误-'XDG0062找不到资源'global%20objects/pictures/user%20controls/icon.xam''以及实际成功使用相同资源的父级(原始(UserControl

在调试代码后和重建过程中,我没有出现错误,两者都没有中断,但它不断重复。

我正试图向实际看起来被破坏的东西显示最少量的代码。

ICON:(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.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="global objectspicturesuser controlsIcon.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

Grand parent 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 objectspicturesuser controlsIcon.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

孙子女/最低用户控制:内容控制这也能正常工作,就像上面所说的那样,所有内容都会显示出来,但错误会再次出现。

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

好的,我找到了异常的解决方案,尽管根据建议,我也从ViewBoxCanvasPath切换到了DrawingBrushDrawingGroup

虽然仍然不确定异常发生的原因,但当我将Grand-ChildUserControl移动到ResourceDictionary时,错误被清除。我也确实忘记使用ItemsControl.ItemTemplate,但添加它对错误没有影响。

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

最新更新