2016-10-26 11 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

현재 해결 방법에는 두 가지 문제가 있습니다.

AnchorablePaneTitle의 스타일 지정은 팬이 DockingManager에 도킹 된 경우에만 작동합니다. 창을 도킹 해제하는 즉시 AvalonDock은 루트 요소를 다른 구조의 LayoutFloatingWindowControl으로 변경하기 때문에 더 이상 AnchorablePaneTitle이 없습니다.

두 번째 문제는 IsFocused 속성을 사용하고 있다는 것입니다. AnchorablePaneTitle은 전혀 초점을 맞출 수 없기 때문에이 기능이 작동하지 않습니다 (기본값은 TextBlock입니다).

이 작업을 수행하려면 AnchorableTitleTemplate 속성 인 DockingManager을 사용하여 제목에 DataTemplate을 만들어야합니다. 고정 또는 고정 해제 : 여기

<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> 

내가 anchorable 현재의되는 모드에 따라 서로 다른 특성에 대응 개의 데이터를 생성 트리거 : 여기

는 일례이다.

도킹 된 상태에서는 제대로 작동하는 Model.IsActive 속성을 사용합니다. 도킹 해제 된 (부동) 상태의 경우 먼저 xcad:LayoutFloatingWindowControl (Window에서 파생 됨)이라는 IsActive 속성을 시도했지만 모든 부동 창에 대해 항상 true이었습니다. 어쩌면 이것 모두는 Owner (기본 창)을 가지고 있기 때문일 수 있습니다. 그래서 방금 부동 창문에 잘 작동하는 IsKeyboardFocusWithin을 사용하기로 결정했습니다.