2016-08-28 21 views
0

ボタン付きの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); 
      }; 
+0

'TextEditorButtonStyle'にいくつかの問題があるかもしれません。そして、画像のソースを変更するコードを表示できますか? –

+0

返信ありがとうございます。詳細を添えて質問を編集しました – igorGIS

+0

わかりませんが、ボタンを有効/無効にするアクションの後にコマンドバインドを無効にする必要があります。バインディングを更新するには 'CommandManager.InvalidateRequerySuggested();'を使うべきです。 –

答えて

1

/無効状態(IsEnabledプロパティ)では、イメージソース値wiを制御できます純粋なXAMLです。初期Source値は直接スタイルのSetterからではなく、Image要素から割り当てられている必要があり、そしてもちろん、あなたがコードからSource値を編集してはならないこと

<Style x:Key="TextEditorToolbarIconStylePng" TargetType="Image"> 

    <Setter Property="Source" Value="/Img/png/enabled/find.png" /> 

    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Source" Value="/Img/png/enabled/findDisabled.png" /> 
     </Trigger> 
    </Style.Triggers> 

</Style> 

注:お使いのTextEditorToolbarIconStylePngスタイルは次のようにする必要があります。

はまた、あなたが手動で画像のプロパティを編集しますしない限り、このスタイルは、(コマンドで制御)ボタンのIsEnabledプロパティから継承されたデフォルトである画像のIsEnabledプロパティを、使用することに注意してください。

+0

おかげで、このアプローチは問題を解決しました。画像を更新して別のコントロールをクリックする必要がなくなりました。 – igorGIS

+0

@igorGISあなたは歓迎です:) – Sam

関連する問題