这里发生了什么事情,如何进行解决?
1. 点击MyToggleButton。现在它看起来像立即按下(选中)。 2. 同时,MyToggleButton_Checked处理程序禁用了MyToggleButton。 3. 现在按下非切换按钮“启用”。我们看到什么?MyToggleButton看起来像是已启用。好的。但等一下,现在它看起来像未按下!为什么?
XAML:
1. 点击MyToggleButton。现在它看起来像立即按下(选中)。 2. 同时,MyToggleButton_Checked处理程序禁用了MyToggleButton。 3. 现在按下非切换按钮“启用”。我们看到什么?MyToggleButton看起来像是已启用。好的。但等一下,现在它看起来像未按下!为什么?
XAML:
<StackPanel>
<ToggleButton x:Name="MyToggleButton" Content="MyToggleButton" Checked="MyToggleButton_Checked"/>
<TextBlock Text="{Binding IsChecked, ElementName=MyToggleButton}" Margin="0,4"/>
<Button Name="EnableButton" Content="Enable" Click="EnableButton_Click"/>
<Button Name="DisableButton" Content="Disable" Click="DisableButton_Click"/>
</StackPanel>
代码后台:
void MyToggleButton_Checked(object sender, RoutedEventArgs e)
{
MyToggleButton.IsEnabled = false;
}
void EnableButton_Click(object sender, RoutedEventArgs e)
{
MyToggleButton.IsEnabled = true;
}
void DisableButton_Click(object sender, RoutedEventArgs e)
{
MyToggleButton.IsEnabled = false;
}
更新:
目前唯一可能的解决方法是:
void EnableButton_Click(object sender, RoutedEventArgs e)
{
MyToggleButton.IsEnabled = true;
var controlTemplate = MyToggleButton.Template;
var buttonChrome = (Microsoft.Windows.Themes.ButtonChrome)controlTemplate.FindName("Chrome", MyToggleButton);
buttonChrome.RenderPressed = false;
buttonChrome.RenderPressed = true;
}
还有其他的吗?
更新2:
另一个解决方法是:
void EnableButton_Click(object sender, RoutedEventArgs e)
{
MyToggleButton.IsEnabled = true;
var controlTemplate = MyToggleButton.Template;
MyToggleButton.Template = null;
MyToggleButton.Template = controlTemplate;
}
但是在模板替换的瞬间,控件会闪烁。