2016-10-26 17 views
2

ペインにフォーカスがあれば、ペインのタイトルの背景を変更したい。AvalonDock:フォーカスしたときのタイトルの背景を変更する

だから、これを試してみました:

<Style TargetType="xcad:AnchorablePaneTitle"> 
     <Setter Property="Background" Value="Green" /> 
     <Style.Triggers> 
      <Trigger Property="IsFocused" Value="true"> 
       <Setter Property="Background" Value="Red" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

グリーン背景が適用されますが、私はペインでコントロールを選択した場合、何の赤が表示されません。 特殊な副作用:ペインを固定解除すると、タイトルの背景がデフォルトに設定されます。私はそれをピン止めすれば、それは緑に設定されます。

どのようにフォーカスを変えることが可能ですか?

+0

XAMLマークアップによれば、これは枠**ヘッダー**をフォーカスしている場合にのみ機能します。あなたが達成しようとしているのは、ペインがアクティブなときにヘッダを赤くすることです(つまり、内容にフォーカスがあることを意味します)。右? – dymanoid

+0

はい、そうです。コンテンツが選択/フォーカスされている場合は、赤色でなければなりません – Suplanus

答えて

2

現在のソリューションには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:LayoutFloatingWindowControlWindowから派生)のIsActiveプロパティを試しましたが、すべてのフローティングウィンドウでは常にtrueでした。これは、すべてがOwner(メインウィンドウ)を持っているためです。だから私はちょうど浮動ウィンドウのために非常にうまく動作するIsKeyboardFocusWithinを使用することに決めました。

関連する問題