使用Settings类中的MultiDataTrigger.Condition

时间:2015-09-29 02:34:13

标签: c# wpf multidatatrigger

如果两个值都符合预期,我的MultiDataTrigger应更改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>

我是following this post,但错误“你必须拥有'绑定'的非空值”仍然存在。

1 个答案:

答案 0 :(得分:0)

普通Settings类不提供与WPF兼容的属性更改通知。它可能这就是你的代码不起作用的原因。但如果没有可靠地再现问题的a good, minimal, complete code example,就无法确切知道。

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

另请注意,根据您引用的SO回答,Condition的{​​{1}}对象应指定MultiDataTrigger而不是Binding

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