2012-06-21 4 views
1

이것은 목표입니다. 편집자 중 일부에서 내비게이션 막대를 제거하는 것입니다 (옵션에서 가능한 모든 항목 제외). 내가 확인했다 Navigation barVisual Studio 탐색 모음을 조작 할 수있는 확장 지점이 있습니까?

여러 가지를 가장 유망한 하나가 부하 후 IWpfTextViewMargin에 액세스 할 수 있었다 :

IWpfTextViewHost TextViewHost; 
IWpfTextViewMargin ContainerMargin; 

public DummyMargin(IWpfTextViewHost textViewHost, 
        IWpfTextViewMargin containerMargin) 
{ 
    this.TextViewHost = textViewHost; 
    this.ContainerMargin = containerMargin; 
    Loaded += DummyMargin_Loaded; 

} 

void DummyMargin_Loaded(object sender, System.Windows.RoutedEventArgs e) 
{ 
    // ContainerMargin is loaded here 
} 

그래서 여기 내가 제거 할 것입니다 그리고 탐색 모음을 찾기 위해 시각적 트리에 위로 통과하고 거기 숨기기 :

Virtual Tree

하지만 이것은 매우 더럽고 신뢰할 수없는 해결책입니다. 더 좋은 걸 아십니까? 특히 그것을 조작하기위한 확장 점 (예 : Editor Extension Points) 중 하나가있는 경우.

답변

0

따라서 언어 서비스가 드롭 다운 막대의 내용을 조작하는 데 사용하는 API는 IVsDropdownBarManager입니다. 적절한 시간에 RemoveDropdownBar를 호출하면 드롭 다운 막대가 제거되고 WPF 비주얼 트리로 재생할 필요가 없습니다.

이 방법에 몇 가지 문제가 있습니다

  1. 는 "적절한시기는"잘 정의되지 않으며, 각 언어 서비스는 다른 시간에 줄을 드롭 다운의 초기화 할 수있다. 대부분의 언어 서비스는 IVsCodeWindow의 AddAdorments 단계에서 코드를 처리하지만 이는 사용자가 연결할 수있는 것이 아닙니다.

  2. 주어진 창에 대해 IVsCodeWindow를 가져와야합니다. 그 자체는 까다 롭고 반드시 신뢰할만한 것은 아닙니다. Jared Parson의 VsVim 코드로 연결하는 방법을 보여줍니다. this file을 보면 IVsTextView를 얻은 다음 GetWindowFrame으로 전화하여 IVsWindowFrame을 얻을 수 있습니다. 이되면 GetCodeWindow으로 전화하여 IVsCodeWindow을 얻으십시오. 그런 다음 IVsDropdownBarManager으로 전송하고 재생을 시작합니다.

  3. 이것은 여전히 ​​예상 할 수없는 언어 서비스의 배후에있는 일을하고 있기 때문에 여전히 매우입니다. 여러 가지 언어 서비스가 충돌을 일으킨다면 놀라지 않을 것입니다. 당신이 탐색 막대를 좋아하거나 다른 뭔가를하려고하지 않기 때문에 여기에 귀하의 목표는 자기에 대한 간단한 확장을하는 경우

말했다, 당신은이 작업을 얻을 수 있어야합니다. 그러나 확실히 그것을 지원하는 좋은 방법은 아닙니다.

0

당신은/해제 비주얼 스튜디오의 옵션 메뉴에서 당 언어 기반의 언어 바 숨길 수 있습니다 ". 탐색 바"

옵션> 텍스트 편집기>언어/모든 언어> 확인/선택을 취소를