我在堆栈面板中有一个 TextBlock 和两个路径对象(向上箭头和向下箭头)。 TextBlock 绑定(bind)到一个名为“Change”的属性,该属性可能具有 -1,0,1 等值。
问题 我想在 1 的情况下显示向上箭头,或者在 -1 的情况下显示向下箭头,或者在 0 的情况下不显示这些 Path 对象。
为了实现这一目标,我在路径类型上定义了样式触发器。
问题
我无法让它工作。我是否遗漏了什么或者有更好的方法来做到这一点。
XAML
<StackPanel Orientation="Horizontal">
<TextBlock Name="changeLbl" Margin="0,0,10,0" Text="{Binding Path=Change}"/>
<Path Fill="{Binding ElementName=changeLbl,Path=Foreground}" Style="{StaticResource downChangePathTrigger}"/>
<Path Fill="{Binding ElementName=changeLbl,Path=Foreground}" Style="{StaticResource upChangePathTrigger}"/>
</StackPanel>
样式资源
<Style x:Key="upChangePathTrigger" TargetType="Path">
<Setter Property="Visibility" Value="Collapsed" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Data" Value="M 0 4 L 4 0 L 8 4 Z" />
<Setter Property="StrokeThickness" Value="5" />
<Setter Property="Stroke" Value="GreenYellow"/>
<Style.Triggers>
<Trigger Property="Fill" Value="GreenYellow">
<Setter Property="Visibility" Value="Visible"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="downChangePathTrigger" TargetType="Path">
<Setter Property="Visibility" Value="Collapsed" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Data" Value="M 0 0 L 4 4 L 8 0 Z" />
<Setter Property="StrokeThickness" Value="5" />
<Setter Property="Stroke" Value="Red"/>
<Style.Triggers>
<Trigger Property="Fill" Value="Red">
<Setter Property="Visibility" Value="Visible"/>
</Trigger>
</Style.Triggers>
</Style>
更新答案
样式触发器
<Style x:Key="changePathTrigger" TargetType="Path">
<Setter Property="Visibility" Value="Hidden" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="StrokeThickness" Value="5" />
<Style.Triggers>
<!--<DataTrigger Binding="{Binding Path=Change,Converter={StaticResource doubleToIntConverter}}" Value="0">
<Setter Property="Stroke" Value="0"/>
</DataTrigger>-->
<DataTrigger Binding="{Binding Path=Change,Converter={StaticResource doubleToIntConverter}}" Value="1">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Data" Value="M 0 4 L 4 0 L 8 4 Z"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Change,Converter={StaticResource doubleToIntConverter}}" Value="-1">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Data" Value="M 0 0 L 4 4 L 8 0 Z"/>
</DataTrigger>
</Style.Triggers>
</Style>
Xaml
<Path Fill="{Binding ElementName=changeLbl,Path=Foreground}" Stroke="{Binding ElementName=changeLbl,Path=Foreground}" Style="{StaticResource changePathTrigger}"/>
最佳答案
这是一个奇怪的结构(触发 Path.Visibility
与 Path.Fill
颜色绑定(bind)到 TextBlock.Foreground
),但它会与合作
<TextBlock Name="changeLbl" Margin="0,0,10,0" Text="{Binding Path=Change}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Text" Value="1">
<Setter Property="Foreground" Value="GreenYellow" />
</Trigger>
<Trigger Property="Text" Value="-1">
<Setter Property="Foreground" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
但我认为你应该减少依赖关系,例如将路径样式中的 Trigger
替换为 DataTrigger
以直接依赖于属性“Change”。例如,您可以更改 Path
或 TextBlock
颜色,并且 Visibility
仍然有效。
<Style x:Key="upChangePathTrigger" TargetType="Path">
...
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Change}" Value="1">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
关于wpf - WPF Path 对象中的属性或数据触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933431/