0

私はしばらくWPFプロジェクトに取り組んでいましたが、2か月間触れていません。戻ってきたので、次の問題があります。

マージされた辞書を使用してスキンを作成し、実行時に簡単に交換します。ただし、各スキンは実行時に変更されません。しかし、私はこれに慣れていませんでしたが、一連のチュートリアルに従い、どこでも DynamicResource を使用しました。代わりに StaticResource を使用する必要があるかどうかさえ疑問に思いませんでした。

結果は、Windows XP (私は 7 を使用) を使用して友人にアプリを送信しようとしたときです。ルナのテーマがアプリに適用され、デザインが見苦しくなります...そして、私が理解している限り、それはDynamicResourceからのものです。

だから今、私は StaticResource に変更したいので、すべての "DynamicResource" を "StaticResource" に置き換えようとしました。そして、それは私にこの例外をスローします:

Message = "'La valeur fournie sur 'System.Windows.StaticResourceExtension' a levé une exception.' numéro de ligne '8' et position de ligne '230'."

In english, it means: Message = "'The value given to 'System.Windows.StaticResourceExtension' threw an exception.' line number '8' and position on the line '230'.

次に、問題をよりよく理解するために、try/catch ブロックを配置します。

{"Impossible de trouver la ressource nommée'styleBackground'. Les noms de ressources respectent la casse."}

英語で:Impossible to find the resource named 'styleBackground'. The resource names are case sensitive.

TabItem についてです。

ここで 2 つの質問があります: DynamicResource を StaticResource に変更することで正しいことをしていますか? もしそうなら、私は何をする必要がありますか?

ありがとう、

FB。

編集: プログラムは、これらの行の最後の行でエラーを取得します。

<Window x:Class="Sc2ReplayMonkey.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        xmlns:local="clr-namespace:Sc2ReplayMonkey" ResizeMode="CanResize"
        Title="Starcraft II Replay Monkey"
        Width="991" Icon="Resources\Icons\SC2_Replay_Monkey.png"
        WindowStartupLocation="CenterScreen" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="1024" Height="774" Visibility="Visible" Foreground="#00000000" Margin="0">
4

2 に答える 2

0

解決策は、(動的リソースで動作する) スキンなしで開始し、ユーザーが実行時にスキンを選択できるようにする代わりに、起動時にすべての resourcedictionaries をロードすることでした。

于 2011-08-27T09:48:01.813 に答える
0

問題が DynamicResource に起因すると考えてどうしますか?

私の知る限り、DynamiResource は、StaticResource とは対照的に、コンパイル時ではなく実行時にリソースをフェッチするために使用されます。DynamicResource は、宣言する前にリソースを参照する必要がある場合に役立ちます (StaticResource を使用するとコンパイル エラーが発生します)。

<ResourceDictionary><DataTemplate>... <Rectangle Fill={DynamicResource MyBrush}></Rectangle>  ...</DataTemplate> <SolidColorBrush x:Key="MyBrush"></SolidColorBrush> <ResourceDictionary>

この場合、DynamicResource の代わりに StaticResource を使用すると、コンパイル エラーが発生します。

さて、問題について、コントロールにスタイルを明示的に割り当てない場合、WPF は現在の OS テーマ、場合によっては XP テーマからデフォルトのスタイルを選択します。これを解決するには、Win 7 テーマを選択してアプリに埋め込むことができます。

これにより多くの作業が追加されますが、実行される OS に関係なく、すべてのコントロール スタイルを保持するようにすべてのコントロール スタイルを再定義する唯一の方法です。

HTH

りあな

于 2011-04-01T11:29:10.663 に答える