3
這裏發生了什麼,以及如何做一個解決方法?WPF ToggleButton不正確的渲染行爲
- 按MyToggleButton。現在看起來像立即按下(選中)。
- 與此同時MyToggleButton_Checked處理程序禁用MyToggleButton。
- 現在按非切換按鈕「啓用」。我們看到了什麼? 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;
}
UPD:
上的那一刻,唯一可能的解決方法是:
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;
}
還有其他嗎?
UPD2:
另一個解決方法是:
void EnableButton_Click(object sender, RoutedEventArgs e)
{
MyToggleButton.IsEnabled = true;
var controlTemplate = MyToggleButton.Template;
MyToggleButton.Template = null;
MyToggleButton.Template = controlTemplate;
}
但控制在模板替換的瞬間閃爍。
看起來效果似乎並不適用於所有的機器。我的電腦是Windows 7 Professional 64位.NET 4.效果依然如此。 – frtnum 2012-04-04 15:59:31
效果取決於活動主題。至少在我的機器上。經典主題就像它應該那樣工作。簡單的主題和航空主題工作不恰當。這裏是我錄製的視頻,整個上傳大小爲3.1 Mb:http://screencast.com/t/KLCIwo9whs – frtnum 2012-04-04 16:47:32