-1

如果两个值都符合预期,我MultiDataTrigger应该更改 a 的属性。TabItem其中一个值Property来自TabItem,另一个是Properties.Settings.Default属性。

<!--<App xmlns:prop="clr-namespace:MyApp.Properties"... -->

<DropShadowEffect x:Key="Glow.Foreground.Large" ShadowDepth="0" Color="WhiteSmoke" 
                  Opacity="1" BlurRadius="10" RenderingBias="Quality"/>

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <Grid Name="Panel" Background="Transparent">
                    <Border Name="ContentBorder" 
                            BorderBrush="#FFD4D4D4" BorderThickness="0">
                        <ContentPresenter x:Name="ContentSite"
                            VerticalAlignment="Center" Effect="{x:Null}"
                            HorizontalAlignment="Center"
                            ContentSource="Header"
                            Margin="10,2"/>
                            </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="Panel" 
                                    Property="Background" 
                                    Value="#FFFAFAFA" />
                            <Setter Property="Foreground"
                                    Value="#FF2B579A" />
                            <Setter TargetName="ContentBorder"
                                    Property="BorderThickness" 
                                    Value="1,1,1,0" />
                            </Trigger>
                        <MultiDataTrigger>
                            <MultiDataTrigger.Conditions>
                                <Condition Property="IsSelected" Value="False"/>
                                <Condition Binding="{Binding 
                                           Source={x:Static prop:Settings.Default}, 
                                           Path=EditorExtendChrome}" Value="True"/>
                            </MultiDataTrigger.Conditions>

                            <Setter TargetName="ContentBorder"
                                    Property="Effect" 
                                    Value="{StaticResource Glow.Foreground.Large}" />
                            <Setter TargetName="ContentBorder"
                                    Property="Background" 
                                    Value="#7FFFFFFF"/>
                        </MultiDataTrigger>
                        <Trigger Property="IsMouseOver" Value="True"
                                 SourceName="Panel">
                            <Setter Property="Foreground"
                                    Value="#FF2B579A" />
                            <Setter Property="Background"
                                    Value="#FFFAFAFA" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

        <!--Default Values-->
        <Setter Property="FontFamily" Value="Segoe UI Semilight"/>
    </Style>

我正在关注这篇文章,但错误“您必须为 'Binding' 提供非空值”仍然存在。

4

1 回答 1

0

普通Settings类不提供与 WPF 兼容的属性更改通知。这很可能是您的代码不起作用的原因。但是如果没有一个好的、最小的完整的代码示例来可靠地重现问题,就无法确定。

Default属性将null在程序执行的早期,因此如果没有属性更改通知,WPF 只会看到该null值,这对它当然没有用。

另请注意,根据您引用的 SO 答案,Conditiona 的对象MultiDataTrigger应该指定Binding而不是Property

如果以上内容不能解决您的问题,请提供更好的代码示例并更具体地说明错误:您何时看到此错误,如何报告,以及错误的完整堆栈跟踪是什么(如果有) ? 请注意,如果有一个好的代码示例,那么即使没有对属性更改通知的直接支持,也有可能提供解决您的确切情况的答案。

于 2015-09-29T03:45:48.440 回答