【问题标题】:Using MultiDataTrigger.Condition from the Settings class使用 Settings 类中的 MultiDataTrigger.Condition
【发布时间】:2015-12-26 09:22:45
【问题描述】:

如果两个值都符合预期,我的MultiDataTrigger 应该更改TabItem 的属性。其中一个值是来自TabItemProperty,另一个是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,但错误“您必须为 'Binding' 提供非空值”仍然存在。

【问题讨论】:

    标签: c# wpf multidatatrigger


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,我刚刚添加了TabItem 的整个Style
    猜你喜欢
    • 2010-12-02
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多