WPF的菜单Disable了还能被点击?
梁苏彬 2008-12-18 03:55:02 怀疑这是不是一个bug,浪费了我2天的时间才查出来。把MenuItem.IsEnabled=False后,还能点击进这个菜单。下面的代码,第一次点击菜单把自己disable了,可是还能继续点进去。经过调查发现是样式的问题,样式里ContentPresenter外面包的TextBlock去掉或者换成StackPanel,Border都没问题。有谁能说明是为什么吗?
XAML代码:
<Window x:Class="sandbox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" >
<Window.Resources>
<ControlTemplate x:Key="MenuItemTemplate" TargetType="{x:Type MenuItem}">
<TextBlock>
<ContentPresenter ContentSource="Header"/>
</TextBlock>
<!--The following is correct-->
<!--<StackPanel>
<ContentPresenter ContentSource="Header"/>
</StackPanel>-->
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="Gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Resources>
<Menu>
<MenuItem Name="miFile" Header="File" Click="miFile_Click" Template="{StaticResource MenuItemTemplate}"/>
</Menu>
</Window>
C#代码:
private void miFile_Click(object sender, RoutedEventArgs e)
{
miFile.IsEnabled = false;
System.Windows.MessageBox.Show("File clicked!");
}