3
ここでは何が起こっているのですか?WPF ToggleButtonのレンダリング動作が正しくありません
- MyToggleButtonを押します。今すぐ即座に押された(チェックされた)ように見えます。
- 同時に、MyToggleButton_CheckedハンドラはMyToggleButtonを無効にします。
- 非トグルボタン「有効」を押します。私たちは何を見ますか? MyToggleButtonは有効になっているように見えます。 OK。しかし、待って、今それは非押されたように見えます!なぜ?!
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-bit .NETです。4.ここでも効果があります。 – frtnum
効果はアクティブなテーマによって異なります。少なくとも私のマシンで。クラシックのテーマは必要に応じて動作します。シンプルなテーマやAeroテーマは不適切です。ここに私が記録したビデオは、全体のアップロードサイズは3.1Mbでした:http://screencast.com/t/KLCIwo9whs – frtnum