2010-09-01 55 views
3

假設我們使用「Ctrl + S」輸入手勢來保存項目。隱藏或禁用wpf中的輸入手勢文本

在文件菜單 - 「保存Ctrl + S」顯示這樣的文字。 現在關於SaveCommand的canexecute,我檢查項目是否需要保存或不保存。如果不需要,則保存被禁用。

在這種情況下,我看到類似「Ctrl + S」的菜單項。我也要隱藏這個輸入手勢文字。

想法?

任何新的飼料?

這個問題沒有得到愛情:(...

+0

我需要它v.soon。請拿出一些好的解決方案.. .. – Rohit 2010-09-01 11:52:48

+0

Feed comments ... – Rohit 2010-09-01 16:23:59

+0

當CanExecute返回false時,應該自動禁用包括手勢文本的菜單項。這不是你所看到的嗎? – 2010-09-02 08:09:11

回答

2

最後我找到了解決。Overrided菜單項的默認模板,並添加了扳機,只要菜單項被禁止,手勢輸入的文本改變顏色看起來像禁用。

這裏是被覆蓋的模板,最後觸發不會上述問題,我的意思是顏色變化..

<ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}" 
       TargetType="{x:Type MenuItem}"> 
    <Border x:Name="Border" 
      TextElement.Foreground="{DynamicResource SubMenuItemTextForegroundColor}" 
      Background="{DynamicResource FileMenuBackgroundBrush}"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" 
            SharedSizeGroup="Icon" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="Auto" 
            SharedSizeGroup="Shortcut" /> 
       <ColumnDefinition Width="13" /> 
      </Grid.ColumnDefinitions> 
      <ContentPresenter x:Name="Icon" 
           Margin="6,0,6,0" 
           VerticalAlignment="Center" 
           ContentSource="Icon" /> 
      <Border x:Name="Check" 
        Width="13" 
        Height="13" 
        Visibility="Collapsed" 
        Margin="6,0,6,0" 
        Background="#C0C0C0" 
        BorderThickness="1" 
        BorderBrush="#404040"> 
       <Path x:Name="CheckMark" 
         Width="7" 
         Height="7" 
         Visibility="Hidden" 
         SnapsToDevicePixels="False" 
         Stroke="#404040" 
         StrokeThickness="2" 
         Data="M 0 0 L 7 7 M 0 7 L 7 0" /> 
      </Border> 
      <ContentPresenter x:Name="HeaderHost" 
           Grid.Column="1" 
           ContentSource="Header" 
           RecognizesAccessKey="{TemplateBinding Tag, 
                    Converter={StaticResource TagToRecognizesAccessKeyConverter} 
                }" 
           VerticalAlignment="Center" /> 
      <TextBlock x:Name="InputGestureText" 
         Grid.Column="2" 
         Text="{TemplateBinding InputGestureText}" 
         Margin="5,2,0,2" 
         DockPanel.Dock="Right" /> 
     </Grid> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="Icon" 
       Value="{x:Null}"> 
      <Setter TargetName="Icon" 
        Property="Visibility" 
        Value="Hidden" /> 
     </Trigger> 
     <Trigger Property="IsChecked" 
       Value="true"> 
      <Setter TargetName="CheckMark" 
        Property="Visibility" 
        Value="Visible" /> 
     </Trigger> 
     <Trigger Property="IsCheckable" 
       Value="true"> 
      <Setter TargetName="Check" 
        Property="Visibility" 
        Value="Visible" /> 
      <Setter TargetName="Icon" 
        Property="Visibility" 
        Value="Hidden" /> 
     </Trigger> 
     <Trigger Property="IsHighlighted" 
       Value="true"> 
      <Setter Property="Background" 
        TargetName="Border" 
        Value="{DynamicResource SubMenuItemMouseOverBackgroundBrush}" /> 
      <Setter Property="TextElement.Foreground" 
        TargetName="Border" 
        Value="{DynamicResource FileMenuBackgroundBrush}" /> 
     </Trigger> 
     <Trigger Property="IsEnabled" 
       Value="false"> 
      <Setter TargetName="HeaderHost" 
        Property="TextElement.Foreground" 
        Value="#DDDDDD" /> 
      <Setter TargetName="InputGestureText" 
        Property="TextElement.Foreground" 
        Value="#DDDDDD" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate>