[英]Using MultiDataTrigger.Condition from the Settings class
如果两个值都符合预期,我的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>
我正在关注这篇文章,但错误“您必须为‘绑定’设置非空值”仍然存在。
普通的Settings
类不提供与 WPF 兼容的属性更改通知。 这很可能就是您的代码不起作用的原因。 但是如果没有一个可靠地重现问题的好的、最小的、完整的代码示例,就没有办法确定。
Default
属性在程序执行的早期将为null
,因此如果没有属性更改通知,WPF 将只会看到null
值,这当然对它没有用。
另请注意,根据您引用的 SO 答案, MultiDataTrigger
的Condition
对象应指定Binding
而不是Property
。
如果以上没有解决您的问题,请提供一个更好的代码示例,并更具体地说明错误:您何时看到此错误,它是如何报告的,以及该错误的完整堆栈跟踪是什么(如果可用) ? 请注意,使用一个好的代码示例,即使没有对属性更改通知的直接支持,也有可能提供解决您的确切情况的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.