/ / Każda pozycja słownika musi mieć powiązany komunikat o błędzie kluczowym - wpf, app.xaml

Każdy wpis słownika musi mieć powiązany komunikat o błędzie kluczowym - wpf, app.xaml

czy ktoś mógłby mi pomóc rozwiązać ten problemproblem, myślę, że zakodowałem poprawnie klucz wymagany. Jest to test słownika aplikacji Style z jednym przyciskiem. Istnieją dwa komunikaty o błędach: Każdy wpis słownikowy musi mieć powiązany klucz, a Wszystkie obiekty dodane do IDictionary muszą mieć atrybut Key lub inny rodzaj klucza z nimi związany. Linia 13 Pozycja 14, obie dla MainWIndow.xaml.

W tym projekcie nie ma już kodu napisanego przez programistę.

To jest kod MainWindow.xaml:

<Window x:Class="WpfApplication1.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:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary Source="App.xaml" /> This is the offending line
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button Style="{StaticResource algo}" />
</Grid>

A to jest kod App.xaml:

<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Style x:Key="algo" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red" />
</Style>
</Application.Resources>

Odpowiedzi:

1 dla odpowiedzi № 1

Jak wskazano w komentarzach, składnia odniesienia do a ResourceDictionary jest

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myresourcedictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>

Bezpośrednia treść ResourceDictionary jest uważane za wpisy słownika, w tym miejscu brakuje Key błąd dotyczy. Słownik powinien wyszukać klucze dla wszystkich wpisów:

<Window.Resources>
<ResourceDictionary>
<conv:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
<conv:BoolToCollapsedConverter  x:Key="BoolToCollapsedConverter" />
...
</ResourceDictionary>
</Window.Resources>

Wyjątkiem od reguły są niejawne style (Style, które mają TargetType zamiast Key).

W twoim przypadku żadna z powyższych nie pomoże, ponieważ Resources w App.xaml traktowane są jako specjalne. Są one rozważane Zasoby globalne i można się do nich odwoływać zewsząd. Próba wykonania odsyłaczy jawnie jak w pierwszym przykładzie spowoduje

Wystąpił błąd podczas znajdowania słownika zasobów "App.xaml".

Zamiast tego zmień swoje MainWindow.xaml do

<Window x:Class="WpfApplication1.MainWindow"
...
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Style="{StaticResource algo}" />
</Grid>

0 dla odpowiedzi nr 2

Dziękuję Funk, dziękuję Mathew Jibin, twoje wyjaśnienia prowadzą mnie do znalezienia rozwiązania, które moim zdaniem jest następujące:

Zmodyfikowano plik App.xaml, aby wyglądał następująco:

    <Application.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="Red" />
</Style>
</Application.Resources>

I zmodyfikował MainWindow usuwając wszystko z siatki:

    ...
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>

Teraz za każdym razem, gdy tworzę nowy przycisk, ma on pożądany styl. Daj mi znać, jeśli zauważysz potencjalny problem z tym rozwiązaniem. Dzięki.