2016-10-16 8 views
0

誰かがこの問題を解決するのを助けてくれますか、私は必要なキーを正しくコーディングしていると思います。これは、ボタンが1つのみのスタイルアプリケーション辞書テストです。各辞書エントリには関連するキーが必要であり、IDictionaryに追加されたすべてのオブジェクトにはKey属性またはそれに関連付けられた他のタイプのキーが必要です。 Line 13 Position 14、どちらもMainWIndow.xamlです。各辞書エントリには、関連するキーエラーメッセージが必要です

このプロジェクトでは、プログラマが作成したコードはありません。

これは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> 

そしてこれは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> 

+0

違反行は 'ResourceDictionary.MergedDictionaries'の内部にある必要があります。それ以外の場合は、辞書内のエントリとして扱われます。 [Documentation](https://msdn.microsoft.com/en-us/library/system.windows.resourcedictionary.mergeddictionaries(v = vs.110)。aspx) –

答えて

0

にごMainWindow.xamlを変更するあなたのマシューJibinに感謝し、あなたの説明は私が解決策だと思うものを見つけるために私をリードし、次のように、それは、あなたにファンクをありがとう:

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

とMAを修正:このようになりApp.xamlを修正

グリッド内のすべてを削除するウィンドウ:

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

ここで、新しいボタンを作成するたびに、希望のスタイルが作成されます。このソリューションで問題が発生した場合は、教えてください。ありがとう。

+0

これは正しいことです。もしあなたが 'Control'のすべてのインスタンスに影響を与えたいのであれば、暗黙的なスタイル(あなたのようなもの)が行く方法です。さもなければ、スタイルに 'Key'を与え、それを' Control'で参照します。 – Funk

+0

@Funk、ありがとう。 – Phantom719

1

ResourceDictionaryを参照する構文は

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

ResourceDictionaryの直接の内容が辞書のエントリと考えられます。これは、欠落したKeyエラーが参照される場所です。辞書には、そのすべてのエントリのキーを検索している必要があります。

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

規則の例外は、implicit Styles(代わりにKeyTargetTypeを持っているスタイル)です。

ResourcesのApp.xamlは特別扱いですので上記のいずれにも該当しません。彼らはグローバルリソースとみなされ、どこからでも参照できます。最初の例のように明示的に参照しようとすると、

リソース辞書 "App.xaml"の検索中にエラーが発生しました。

代わり

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