5

VS 2012 Express WPF プロジェクト (C# コード ビハインド) に取り組んでいますが、「プロパティ式でループが検出されました」というエラーが表示されます。先に進む前に、エラーが発生する理由がわかりました。エラー リストに表示され、青で下線が引かれているにもかかわらず、それについて何をすべきか、または処理する必要があるかどうかさえわかりません。プログラムはコンパイルされ、問題なく実行されます。もちろんこれをグーグルで検索しましたが、結果はさまざまです。私の質問は 2 部構成ですが、まず、概要を以下に示します。

問題のコード:

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<!-- setter properties -->
</Style>

ご覧のとおり、問題の原因となっている Button を参照する Button のスタイルです。私が読んだ最初の回避策は、次のようにコードを分離することでした。

<Style x:Key="ButtonStyleToApply" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
    <!-- setter properties -->
</Style>
<!-- and in another style dictionary, -->
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyleToApply}"/>

...そして、2 つのスタイル セットが異なる辞書に入れられます。明らかに、これも何の役にも立たなかった - VS はまだ私が何をしていたかを嗅ぎつけたが、それでもコンパイルして正常に動作した。ここで、さらに別の回避策を示します。

「Visual Studio の XAML デザイナーにいくつかのアーキテクチャ上の変更があり、このシナリオが後退しました。今後、このエクスペリエンスを改善するために取り組んでいますが、現時点では、Application オブジェクト (App. xaml) ではなく、ローカル ドキュメント (MainPage.xaml) でそれらを定義します」

これは、テクニカル サポートクエリに投稿されたものです。(Connect.Microsoft.Com)

しかし、私はすべての人からの実践的な経験を信頼しています. 私の仲間のコーダーは私に何を教えてくれますか? 私の質問は二部構成です。1. プログラムがコンパイルされている場合、回避策を実行する必要がありますか? そして2.私が行ってもいいなら、VSにそれを無視するように指示する方法はありますか? 私の側またはVSでそれを無視することは、おそらく「悪い習慣」と見なされることを知っていますが、それを超えて...?

4

1 に答える 1

13

使用している構文に問題はありません。既存の暗黙的なスタイルに基づく暗黙的なスタイルを定義することは合法です。あなたが提供したコードサンプルは、VS 2010 では問題なく動作しますが、VS2012 では問題のエラーが発生します。

また、両方のバージョンで正常にコンパイルおよび実行されるため、問題は VS 2012 XAML デザイナーのサポートにあると思われます。これがどれだけ重要かは、WPF ビューのデザイナー レンダリングにどの程度依存しているかによって異なります。(たとえば、私は通常、レンダリングされたビューを非表示にして、XAML ビューだけで作業します。) その機能を使用すると、設計時にすべてのプロパティが適切に設定されていないことに気付くかもしれません。もちろん、セッターは実行時までほとんど効果がないので、違いに気付かないかもしれません。

そして、あなたの質問が正しく指摘しているように、Microsoft でさえこれを VS2012 のリグレッションとして特定しており、エラーが発生することを期待しておらず、将来のある時点でデザイナーのバグを修正する可能性が高いことを強く示唆しています。

于 2013-02-12T21:54:25.283 に答える