J'ai créé un projet simple qui illustre le problème que j'obtiens où j'obtiens l'erreur: 'Fournir de la valeur sur' System.Windows.Markup.StaticResourceHolder ' a jeté une exception. Numéro de ligne '6' et position de ligne '9'.WPF a fusionné ResourceDictionary avec la ressource qui lie à la ressource dans un autre dictionnaire ne fonctionne pas
La mise en page du projet est très simple et je l'ai téléchargé à dropbox: https://www.dropbox.com/s/451b5zkw8oqgcld/StyleTest1.zip?dl=0
MainWindow.xaml
<Window x:Class="StyleTest1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml" />
<ResourceDictionary Source="Dictionary2.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Background" Value="{DynamicResource Button.Static.Background}"/>
</Style>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Style="{DynamicResource ButtonStyle1}">
</Button>
</Grid>
</Window>
Dictionary1.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:po="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<GradientStopCollection po:Freeze="true" x:Key="ButtonBackgroundStops">
<GradientStop Color="#2d2d2f"/>
<GradientStop Color="#2d2d2f" Offset="1"/>
</GradientStopCollection>
<LinearGradientBrush
po:Freeze="true"
x:Key="ButtonBackgroundBrush"
GradientStops="{StaticResource ButtonBackgroundStops}"
StartPoint="0.5,-0.05"
EndPoint="0.5,0.66" />
</ResourceDictionary>
Dictionary2.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<LinearGradientBrush
x:Key="Button.Static.Background"
GradientStops="{Binding Source={StaticResource ButtonBackgroundBrush}, Path=GradientStops}"
StartPoint="{Binding Source={StaticResource ButtonBackgroundBrush}, Path=StartPoint}"
EndPoint="{Binding Source={StaticResource ButtonBackgroundBrush}, Path=EndPoint}"/>
</ResourceDictionary>
Et c'est tout ... si j'exécute ce programme j'obtiens l'erreur: 'Fournir une valeur sur' System.Windows.Markup.StaticResourceHolder 'a généré une exception.' Numéro de ligne '6' et position de ligne '9'.
Cependant, si je modifie MainWindow.xaml à ce qui suit je ne reçois la question: Voici le lien pour la version dropbox modifiée: https://www.dropbox.com/s/ceikh5b8cfecdkw/StyleTest2.zip?dl=0
MainWindow.xaml
<Window x:Class="StyleTest2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StyleTest2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml" />
<ResourceDictionary Source="Dictionary2.xaml" />
</ResourceDictionary.MergedDictionaries>
<LinearGradientBrush
x:Key="Button.Static.Background"
GradientStops="{Binding Source={StaticResource ButtonBackgroundBrush}, Path=GradientStops}"
StartPoint="{Binding Source={StaticResource ButtonBackgroundBrush}, Path=StartPoint}" />
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Background" Value="{DynamicResource Button.Static.Background}"/>
</Style>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Style="{DynamicResource ButtonStyle1}">
</Button>
</Grid>
</Window>
qui suggérerait que c'est un problème avec la liaison LinearGradientBrush dans Dictionary2.xaml à la ressource ButtonBackgroundBrush qui se trouve dans Dictionary1.xaml.
Quelqu'un peut-il me dire ce que je fais mal ici et quelle est la bonne façon d'avoir une ressource dans un dictionnaire référencer une ressource dans un autre dictionnaire?
Merci pour votre temps,
codeOwl
Pourquoi ne pas simplement combiner les deux Dictionary1.xaml et Dictionary2.xaml en un seul afin de résoudre le problème si cela est en effet une cause racine de celui-ci ? Cordialement, –
Ceci est juste une démo pour reproduire le problème. En réalité, je crée un add-on pour un programme écrit en WPF et Dictionary1 est en fait l'habillage actuel de ce programme. Donc, pour tester, j'ai écrit une application WPF, tout comme la démo dans ce post où je fusionne dans leur dictionnaire de la peau de la même manière que je fusionne dans Dictionary1 dans la démo ... mais il ne fonctionne pas ... Je reçois le même erreur ... d'où ce post ... – user2109254
S'il vous plaît affiner votre question à ce problème de programmation particulier et supprimer la partie descriptive trop large.Merci et salutations, –