2

標準のChromeを置き換えるためにウィンドウのスタイルを設定しましたが、EventSettersを使用してアクティブ化イベントと非アクティブ化イベントを処理したいと思います。「...'Activated'はRoutedEventが登録されている必要があります...」というエラーが表示されます。

  <EventSetter Event="Activated" Handler="Window_Activated"/>

ただし、これは同じスタイルで正常に機能します。

  <EventSetter Event="Loaded" Handler="Window_Loaded"/>

誰かがこれに出くわしたり、何が起こっているのか知っていますか?

編集:

<Style x:Key="Window_Cartesia" TargetType="{x:Type Window}">

  <Setter Property="WindowStyle" Value="None"/>
  <Setter Property="AllowsTransparency" Value="True"/>

  <Setter Property="Background" Value="Transparent"/>

  <EventSetter Event="Loaded" Handler="Loaded"/>

  <EventSetter Event="Activated" Handler="Window_Activated"/>

  <EventSetter Event="KeyDown" Handler="KeyDown"/>

..。

編集:

これはそれをカバーしているようです。

Loadedイベントで定義:

AddHandler Win.Activated, AddressOf Activated
AddHandler Win.Deactivated, AddressOf Deactivated

これはスタイルのコードビハインドであるため、Winであるインスタンス参照が必要です。これがこれを達成するための最良の方法であるかどうかはわかりませんが...

編集1:

または、IsActiveがxamlで処理するためのトリガー。

<Trigger Property="IsActive" Value="True">
...
</Trigger>
4

1 に答える 1

1

完全なスタイル宣言を貼り付けてもらえますか?スタイルのターゲットタイプに問題がある可能性があります。LoadedFrameworkElementで定義され、ActivatedはWindowで定義れます。Style要素の属性としてTargetType={x:TypeWindow}を設定してみてください。

編集:アクティブ化はルーティングされたイベントではありません。したがって、あなたのスタイルでそれを使用することはできません。または、コードビハインドでこのイベントをサブスクライブすることもできます。

于 2010-02-17T23:47:42.407 に答える