0

次のXAMLがあります

<ProgressBar Grid.Column="0" Grid.Row="0" Margin="0,1" Minimum="0" Maximum="100" Value="{Binding Progress}">
    <ProgressBar.Resources>
        <Style TargetType="{x:Type ProgressBar}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding DidAllServicesRestart}" Value="False">
                    <Setter Property="Foreground" Value="DarkRed"/>
                    <Setter Property="Value" Value="100"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ProgressBar.Resources>
</ProgressBar>

DataTrigger は、Foreground を DarkRed に設定する場合にうまく機能しますが、プログレスバーの値を 100 に設定すると機能しません。{Binding Progress} がそれをオーバーライドするためだと思いますか?

どうすればこれを回避できますか?

4

1 に答える 1

0

{Binding Progress}がそれをオーバーライドするのは正しいです。依存関係プロパティの優先順位では、ローカル値は 3 番目に優先度が高く、スタイル トリガーは 6 番目です。

3)ローカル値。ローカル値は、"ラッパー" プロパティ (XAML の属性またはプロパティ要素として設定することと同じ) を使用して設定するか、特定のインスタンスのプロパティを使用して SetValue API を呼び出すことによって設定できます。バインディングまたはリソースを使用してローカル値を設定すると、これらは直接値が設定されているかのように優先されます。

....

6)スタイルトリガー。ページまたはアプリケーションからのスタイル内のトリガー (これらのスタイルは、明示的または暗黙的なスタイルのいずれかである可能性がありますが、優先順位が低い既定のスタイルからのものではありません)。

于 2012-11-08T00:09:18.423 に答える