現在のソリューションには2つの問題があります。
AnchorablePaneTitle
のスタイリングは、ペインがDockingManager
にドッキングされている場合にのみ機能します。ペインをドッキング解除するとすぐに、AnchorablePaneTitle
は存在しません。これは、AvalonDockがルート要素を構造が異なるLayoutFloatingWindowControl
に変更するためです。
2番目の問題は、IsFocused
プロパティを使用していることです。 AnchorablePaneTitle
にはまったく集中できないため(デフォルトではTextBlock
)、これは機能しません。
AnchorableTitleTemplate
プロパティを使用してDataTemplate
を作成し、DockingManager
というタイトルを作成する必要があります。ドッキングまたはドッキング:ここ
<xcad:DockingManager.AnchorableTitleTemplate>
<DataTemplate>
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding Model.IsActive, Mode=OneWay,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type xcad:LayoutAnchorableControl}},
FallbackValue=False}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsKeyboardFocusWithin, Mode=OneWay,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type xcad:LayoutFloatingWindowControl}},
FallbackValue=False}" Value="True">
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="Background" Value="Green"/>
</Style>
</Grid.Style>
<TextBlock Foreground="White" FontWeight="Bold" Text="{Binding Title}" />
</Grid>
</DataTemplate>
</xcad:DockingManager.AnchorableTitleTemplate>
私は固定可能現在にしているモードに応じて異なる特性に反応する二つのデータトリガーを作成します。ここで
は一例です。
ドッキング状態の場合、私はModel.IsActive
プロパティを使用します。これはうまくいきます。 ドッキング解除(フローティング)状態の場合、最初にxcad:LayoutFloatingWindowControl
(Window
から派生)のIsActive
プロパティを試しましたが、すべてのフローティングウィンドウでは常にtrue
でした。これは、すべてがOwner
(メインウィンドウ)を持っているためです。だから私はちょうど浮動ウィンドウのために非常にうまく動作するIsKeyboardFocusWithin
を使用することに決めました。
XAMLマークアップによれば、これは枠**ヘッダー**をフォーカスしている場合にのみ機能します。あなたが達成しようとしているのは、ペインがアクティブなときにヘッダを赤くすることです(つまり、内容にフォーカスがあることを意味します)。右? – dymanoid
はい、そうです。コンテンツが選択/フォーカスされている場合は、赤色でなければなりません – Suplanus