0

コードをクリーンアップするために、app.xaml を個別のリソース ディクショナリに分割しようとしています。これは実行時には機能しますが、設計時には機能しません。

app.xaml で切り取った

    <Application.Resources>
      <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/;component/Theme/Colors.xaml" />
            <ResourceDictionary Source="/;component/Theme/Styles.xaml" />
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>
    </Application.Resources>

Colors.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <SolidColorBrush x:Key="backgroundBrush" Color="Gold"/>
</ResourceDictionary>

スタイル.xaml

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

      <Style TargetType="StatusBar">
        <Setter Property="Background" Value="{StaticResource backgroundBrush}" />
      </Style>
    </ResourceDictionary>

MainWindow.xaml の抜粋

<Window x:Class="test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="test" Width="800" Height="600" >
    <StatusBar Name="statusBar" DockPanel.Dock="Bottom">
        <StatusBarItem Content="{Binding statusMessage}" />
    </StatusBar>

DesignView で次のエラーが発生します: エラー 8 '{DependencyProperty.UnsetValue}' は、プロパティ 'Background' の有効な値ではありません。C:\Daten\DotNet\test\test\MainWindow.xaml 123

次のように backgroundBrush を app.xaml に直接配置した場合:

    <Application.Resources>
      <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/;component/Theme/Colors.xaml" />
            <ResourceDictionary Source="/;component/Theme/Styles.xaml" />
            <ResourceDictionary>
                <SolidColorBrush x:Key="backgroundBrush" Color="Gold"/>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>
    </Application.Resources>

DesignView は問題ありません。

このブラシが別のリソース ディクショナリに配置されている場合、backgroundBrush の場所を DesignView に伝える方法はありますか?

4

3 に答える 3

5

それが問題StaticResourceですよね。共有\マージ\ダイレクト リソース ディクショナリを階層的に使用して明示的に解決されたリソース キーが必要です。

2つのオプションがあります...

Colors.xaml辞書をマージStyles.xaml

また

Styles.xaml 使用して bursh を参照してくださいDynamicResource

于 2011-10-12T13:16:00.077 に答える
1

リソースがMainWindowが存在するアセンブリとは異なるアセンブリにあり、一方のディクショナリがもう一方のディクショナリを参照している場合。その場合、参照は解決されません。ターゲットフレームワークが4.0の場合、このバグはMicrosoftサイトですでに報告されています。ただし、それらは回避策を提供しています。リソースディクショナリに空のスタイルを追加するだけで、次のように正常に機能します-

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/;component/Theme/Colors.xaml" />
        <ResourceDictionary Source="/;component/Theme/Styles.xaml" />
    </ResourceDictionary.MergedDictionaries>
    <Style TargetType="{x:Type Window}"/>
  </ResourceDictionary>
</Application.Resources>

詳細については、このリンクを参照してください-https ://connect.microsoft.com/VisualStudio/feedback/details/555322/global-wpf-styles-are-not-shown-when-using-2-levels-of-references #詳細

于 2011-10-12T13:30:15.583 に答える
1

試す

{StaticResource ApplicationPageBackgroundThemeBrush}

ステータスバーの背景値

于 2012-11-11T19:19:09.540 に答える