隐藏或禁用wpf中的输入手势文本

时间:2010-09-01 09:18:43

标签: wpf

假设我们使用“Ctrl + S”输入手势来保存项目。

在文件菜单 - “保存Ctrl + S”中显示此类文本。 现在关于SaveCommand的canexecute我检查项目是否需要保存。如果不需要则禁用“保存”。

在这种情况下,我看到菜单项如“Ctrl + S”。我也要隐藏这个输入手势文本。

想法?

任何新的Feed?

这个问题没有爱情:( ...

1 个答案:

答案 0 :(得分:2)

最后我发现了一个问题。覆盖了菜单项的默认模板,并添加了一个触发器,每当禁用菜单项时,将输入手势文本的颜色更改为看起来像已禁用。

这是覆盖模板,最后一个触发器执行上述问题,我的意思是颜色变化..

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