繁体   English   中英

使用 Settings 类中的 MultiDataTrigger.Condition

[英]Using MultiDataTrigger.Condition from the Settings class

如果两个值都符合预期,我的MultiDataTrigger应该更改TabItem的属性。 其中一个值是一个PropertyTabItem ,另一种是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>

我正在关注这篇文章,但错误“您必须为‘绑定’设置非空值”仍然存在。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM