使用MultiDataTrigger.条件从设置类
本文关键字:设置 条件 MultiDataTrigger 使用 | 更新日期: 2023-09-27 18:15:02
如果两个值都符合预期,我的MultiDataTrigger
应该改变TabItem
的属性。其中一个值是来自TabItem
的Property
,另一个是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'设置一个非空值"仍然存在。
正常的Settings
类不提供wpf兼容的属性更改通知。可能是,这就是为什么你的代码不能工作。但是,如果没有一个好的、最小的、完整的代码示例来可靠地再现问题,就无法确定。
Default
属性在程序执行的早期将是null
,因此如果没有属性更改通知,WPF将只会看到null
值,这当然对它没有用处。
还请注意,根据您引用的SO答案,MultiDataTrigger
的Condition
对象应指定Binding
而不是Property
。
如果上面没有解决你的问题,请提供一个更好的代码示例,并更具体地说明错误:你什么时候看到这个错误,它是如何报告的,什么是错误的完整堆栈跟踪(如果可用)?请注意,如果有一个好的代码示例,那么即使没有直接支持属性更改通知,也可能提供解决您的确切场景的答案。