2

カスタムの名前付きスタイルを app.xaml に追加しました。

外部リソース ディクショナリを作成し (app.xaml のマージされたディクショナリに添付します)、リソース ディクショナリで上記のスタイルのいずれかを使用しようとすると、そのようなスタイルはないと表示されます。

また、デフォルトのスタイル (つまり、アプリケーション全体に適用される名前のないスタイル) は、テンプレート要素には適用されません。

注: テンプレートのビルド アクションは「ページ」です。


私のコードの書き方の例を次に示します。

<Application x:Class="Application"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
    ShutdownMode="OnExplicitShutdown">
    <Application.Resources>
        <ResourceDictionary>

            <Style
                    x:Key="StackPanelStyle" 
                    TargetType="StackPanel" 
                    BasedOn="{StaticResource {x:Type StackPanel}}">
                <Setter Property="Margin" Value="5"/>
                <Setter Property="Orientation" Value="Horizontal" />
                <Setter Property="Height" Value="40"/>
            </Style>

            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Templates/DataTemplate1.xaml"/>
                <ResourceDictionary Source="/Templates/DataTemplate2.xaml"/>
                <ResourceDictionary Source="/Templates/DataTemplate3.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

これはデータ テンプレートの例です。

<DataTemplate DataType="{x:Type Entity}" x:Key="NameDataTemplate">
    <Expander>
        <StackPanel>
            <--The following line produces: StackPanelStyle was not found.-->
            <StackPanel Style="{StaticResource StackPanelStyle}">
                <Label Content="Name:"/>
                <TextBox Text="{Binding Name}"/>
            </StackPanel>
        </StackPanel>
    </Expander>
</DataTemplate>

何か案は?別の方法で辞書をマージする必要がありますか?

4

2 に答える 2

3

リソース ディクショナリ内の DataTemplate は、どれがそれを使用しているかを認識せず、使用されただけであるため、コードはうまく機能しません。ハリウッドモードみたいな。彼らは別々にコンパイルしました。

これを機能させるには、app.xaml のスタイルを DataTemplate の同じリソース ディクショナリに配置するか、この結合が気に入らない場合は、別のリソース ディクショナリに配置して、DataTemplate のリソースにマージします。辞書

于 2009-11-03T01:25:56.050 に答える
1

App.xaml のビルド アクションは ApplicationDefinition である必要があり、リソース ディクショナリ ファイルのビルド アクションは Page である必要があります。これらはデフォルトであるため、両方とも正しいと思います(ページについてはすでに言及されています)。

あなたの状況で他に問題があるとは思えません。静的リソースが正しい順序で定義されている限り、アプリケーションの実行時にそれらを見つけることができるはずです。

編集

デバッグのアイデア: シンプルなボタン スタイルで "TestDictionary.xaml" という新しいリソース ディクショナリを作成します。このディクショナリが他のディクショナリ (DataTemplate1.xaml など) と同じフォルダーにあることを確認してください。TestDictionary のみへのリンクを入れますMergedDictionaries(他はコメントアウトします)。起動ウィンドウにボタンを配置して、スタイルを適用します。それが機能するかどうかを確認してください。失敗した場合は、マージに問題があることがわかります。それが成功した場合、あなたの何かDataTemplateに問題がある可能性があります。

于 2009-11-03T01:44:14.157 に答える