2

wpf-mvvmアプリケーションにボタンコントロールがあります。

プロパティ(viewmodelで定義)を使用してICommand、ボタンクリックイベントをviewmodelにバインドします。

->実行と実装canexecute用のパラメーターがありますICommandRelayCommand)。

偽の場合でもCanExecute...ボタンが無効になっていない...ボタンの内容が画像の場合

ただし、ボタンの内容がテキストの場合、有効化/無効化は正常に機能します。

<Button DockPanel.Dock="Top" 
                        Command="{Binding Path=MoveUpCommand}">
                    <Button.Content>
                        <Image Source="/Resources/MoveUpArrow.png"></Image>
                    </Button.Content>
                    <Style>
                        <Style.Triggers>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="Opacity" Value=".5" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Button>
4

3 に答える 3

15

ボタンは無効になりますが、画像のレンダリングには影響しません。画像の不透明度を.5に変更するスタイルでトリガーを作成する必要があります。そうすると、次のようにボタンの目的の効果が無効になります。

<Style x:Key="imageButton" TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value=".5" />
            </Trigger>
        </Style.Triggers>
</Style>
于 2010-12-26T07:24:11.613 に答える
1

ありがとう!すべてのボタンの後で提案されたコードを試しました。動作しませんでした。トリガーだけを抽出して、他のすべてのボタンから継承された汎用ボタンに挿入しようとしました:チャームのように機能しました!最初にこのコード:

<Style x:Key="SecButton" TargetType="Button">
    <Setter Property="FontSize" Value="16" />
    <Setter Property="Margin" Value="0,0,5,5" />
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Opacity" Value=".5" />
        </Trigger>
    </Style.Triggers>
</Style>

上記のコードに基づいて、次のようなボタンを作成しました。

<Style x:Key="NewBtnStyle" TargetType="Button" BasedOn="{StaticResource SecButton}">                
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Source="Images/new.png" Width="50" Height="50" />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

無効になっているボタンの画像は、不透明度0.5に自動的に暗くなります。

于 2012-06-20T19:13:47.493 に答える
0

Hasan Khanが投稿したものと同様のトリガーと組み合わせて、ピクセルシェーダー効果(見た目ほど複雑ではありません。アセンブリ参照を追加するだけで、組み込みのWPF効果と同じくらい簡単に使用できます)が必要になります。無効になっているボタンの画像をグレースケールで表示します。

于 2010-12-26T08:50:30.847 に答える