0

この WPF アプリケーションには、スタイルを解除すると、強調表示、ホバー、または選択された項目などの既定の Windows テーマに一致するカスタム リストボックスがあります (つまり、素敵な青の半透明のグラデーション)。

ただし、独自の ListBoxItem テンプレートを作成して、このコードのような値を使用しようとすると...

<Trigger Property="Selector.IsSelected" Value="True">
    <Setter TargetName="Bd" Property="Panel.Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
    <Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
</Trigger>

...コントロールは、Aero テーマのすべての痕跡を失い、古い Win95/Classic の外観に戻ります。「ねえ... テーマの「ハイライト」スタイルを境界線に適用してください。

繰り返しますが、リソースは、コントロールを再テンプレート化するまでそこにあるようにロードされますが、テーマの組み込みスタイルにアクセスするにはどうすればよいでしょうか? 結局のところ、その「選択」の外観はいたるところにあります... ListBox、ComboBox、ListView、どこでも。車輪を再発明する必要なく、私たちもそれをコントロールしたいだけです。

注: ShowMeTheTemplate.exe アプリを使用してデフォルトの「Aero」スタイルを取得しましたが、これも実行時に表示されるものではありません。

4

2 に答える 2

0

あなたの答えはここにあるようです:

....ItemsContainerStyle単に置換を定義する代わりに使用する必要がItemTemplateあります...そして、Style使用BasedOnを定義して、テーマによって FrameworkElement 要素に定義されたデフォルトのスタイルを継承します。

テーマによって定義されたデフォルトのスタイルを活用するために使用できる他のテクニックもいくつかあります (... 追加のオプションを提供するだけです)。

また、上記で説明していない、マークアップ拡張機能を使用していくつかのスタイルを結合する別の手法 (つまり、既定のスタイルと独自のスタイルを結合することもできます) があります。

于 2012-08-26T13:39:45.030 に答える
0

を使用BasedOn="{StaticResource {x:Type ItemType}}"してStyle既存のテンプレートを変更できますが、デフォルト テンプレートの一部をカスタム テンプレートとマージする方法はありません。テンプレートはモノリシックです。

于 2012-08-26T14:57:22.840 に答える