ボタン付きのwpfアプリがあります。これには2つの状態が有効/無効になっています。 ボタンは、その内容として画像をしている:だから、いくつかの例では、ボタンは無効になりますwpf画像ソースの変更作業後にフォーカスが変更されました
<Button Name="FindButton" Style="{StaticResource TextEditorToolbarButtonStyle}"
Command="FindButtonCommand"
Margin="2,0,10,0">
<Image Name="FindSvgViewbox" Style="{StaticResource TextEditorToolbarIconStylePng}"
Source="/Img/png/enabled/find.png"/>
</Button>
、およびそれらのイメージソースは次のように変更されます:
FindSvgViewbox.Source = new BitmapImage(new Uri(disabledImagePath));
これは動作しますが、画像はactualy後にのみ変更します私はテキストボックスや他のボタンのようないくつかの種類の遅れや遅延があるようないくつかの他のコントロールをクリックします。 何が原因なのですか?
編集:ここでは
がボタンのスタイルです:
<Style x:Key="TextEditorToolbarButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Width" Value="30"></Setter>
<Setter Property="Height" Value="30"></Setter>
<Setter Property="BorderThickness" Value="0"></Setter>
<Setter Property="Background" Value="#F1F1F1"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" BorderThickness="0">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#C5C5C5"/>
</Trigger>
</Style.Triggers>
</Style>
画像ソースはボタンのCanExecuteChanged
ハンドラで変更:イメージソースにのみ有効に依存している場合は
FindButtonCommand = new RelayCommand(DoFind, o => FindCanExecute);
FindButtonCommand .CanExecuteChanged += (sender, args) =>
{
AppUtils.ChangeIconSource(FindButton, FindSvgViewbox);
};
'TextEditorButtonStyle'にいくつかの問題があるかもしれません。そして、画像のソースを変更するコードを表示できますか? –
返信ありがとうございます。詳細を添えて質問を編集しました – igorGIS
わかりませんが、ボタンを有効/無効にするアクションの後にコマンドバインドを無効にする必要があります。バインディングを更新するには 'CommandManager.InvalidateRequerySuggested();'を使うべきです。 –