使用xaml/wpf中的setter重写progressbar的绑定值

使用xaml/wpf中的setter重写progressbar的绑定值,wpf,xaml,progress-bar,Wpf,Xaml,Progress Bar,我有以下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>

我有以下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对于将前台设置为DarkRed非常有效,但是将progressbar的值设置为100不起作用。我猜是因为{Binding Progress}覆盖了它


我如何解决这个问题?

您是对的,
{Binding Progress}
覆盖了它。在中,本地值的优先级第三,而样式触发器的优先级第六

3) 局部值。局部值可以通过方便的“包装器”属性进行设置,这也等同于在XAML中设置为属性或属性元素,或者通过使用特定实例的属性调用SetValue API进行设置。如果使用绑定或资源设置本地值,则这些值的优先级都与设置直接值的优先级相同

6) 样式触发器。来自页面或应用程序的样式中的触发器(这些样式可能是显式或隐式样式,但不是来自优先级较低的默认样式)


谢谢你的回复。然而,你知道什么是好的/通用的解决方案吗?@user45763这取决于。。。您只是想设置默认值/初始值吗?如果是这样,那么一个好的解决方案就是在视图模型中设置
Progress=100