2012-07-03 3 views
4

좋습니다. 따라서 내 응용 프로그램에서 기본 메뉴에 "저장"및 "다른 이름으로 저장 ..."항목을 표시하려면 Visual Studio와 동일하게 수행해야합니다. "현재 파일 저장"및 "현재 파일 저장 중 ..."WPF 메뉴 다루기 HeaderStringFormat 및 Access Keys 다른 것들 중에서

정상적인 액세스 키 (각각 "S"및 "A")를 갖고 싶습니다.

나는 두 가지 해결책을 제시했지만 어느 것도 바람직하지 않습니다.

  • 대신 XAML에서 독점적으로 메인 메뉴를 만드는, 내가 그래서 생성 된 메뉴 아이템에 어떤 일이 일어나는지를 완벽하게 제어 할하려는 MainWindowViewModel에 모든 것을 만들 수 있습니다. 그러나 이것은 ViewModel의 각 MenuItem 아이콘에 대한 참조를 포함해야하므로 MVVM (이는 매우 엄격하게이 시간을 준수하려고 시도하고 있습니다)의 위반이 될 것이라고 생각합니다. 게다가 조금 지저분 해 보입니다.

  • 내가 그렇게 같은 단지이 두 가지 특정 메뉴 아이템 (그리고 아마도 미래의 것들)의 헤더를 규정 할 수 있지만, 나는이 헤더에 밑줄을 가지고뿐만 아니라 MenuItem을 그만 둘뿐만 아니라 액세스를 포함하지 않는 키.

<MenuItem Header="{Binding CurrentFileName}" 
      HeaderStringFormat="Save {0} _As..."> 

어떻게해야합니까?

답변

4

Whelp, 알아 냈습니다. 적어도 XAML에 설명 된 전체 기본 메뉴를 사용하여이 작업을 수행하는 방법에 대해 알아보십시오. 방금 헤더 콘텐트를 문자열 대신 AccessText 컨트롤로 만들었고 매력처럼 작동합니다.

<MenuItem> 
    <MenuItem.Style> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding HasSelection}" Value="false"> 
        <Setter Property="IsEnabled" Value="false"/> 
        <Setter Property="Header"> 
         <Setter.Value> 
          <AccessText Text="Save Selected File _As..."/> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding HasSelection}" Value="true"> 
        <Setter Property="IsEnabled" Value="true"/> 
        <Setter Property="Header"> 
         <Setter.Value> 
          <AccessText Text="{Binding SelectedFile.Filename, StringFormat=Save {0} _As...}"/> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </MenuItem.Style> 
</MenuItem>