3

XAML内のWPFで、ボタンに適用されてボタンが無効になると、無効になっている間は0.5の不透明度にフェードし、一度有効にすると1.0の不透明度にフェードバックするようにControlTemplateを拡張する方法。

この視覚効果は、親が無効になっている場合にも機能するはずです。

4

1 に答える 1

9

このためにControlTemplateは必要ありません。あなたはただのスタイルでこれを達成することができます。次のボタンスタイルは、すべてのボタンに適用されます。IsEnabledがtrueの場合は不透明度を0.5に設定し、トリガー条件が適用されなくなると自動的に1に戻します。ControlTemplateをスタイルで適用している場合は、このトリガーをそのスタイルに追加できます。IsEnabledが継承されるため、親が無効になっている場合にも機能します。

<Window.Resources>
    <Style TargetType="{x:Type Button}">
        <Style.Triggers>
            <Trigger Property="Control.IsEnabled" Value="false">
                <Setter Property="Control.Opacity" Value="0.5" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

または、特にControlTemplateソリューションが必要でしたか?

アップデート

TemplateBindingはConverterをサポートしていないと思うので、ControlTemplateでこれを実行する場合は、論理ツリーで十分に高い次のBindingステートメントのようなものを使用する必要があります。

Opacity={Binding Path=IsEnabled, 
         RelativeSource={RelativeSource TemplatedParent}, 
         Converter={StaticResource BoolToDoubleConverter}}

ここで、BoolToDoubleConverterはIValueConverterであり、trueの場合は1を返し、falseの場合は0.5を返します。スタイルを使用できるのであれば、スタイルアプローチをお勧めします。はるかに簡単だと思います。

于 2009-04-27T08:12:27.640 に答える