c# - 转换器事件之前的 UWP
问题描述
我正在寻找在转换器之前发生的事件。
我的意思是,我有一个 custom UserControl
,它包含一个ListView
. 它ListViewItem
有一些元素,例如<TextBlock Foreground="{x:Bind IsPlaying, Converter={StaticResource RowColorConverter}, Mode=OneWay} />"
.
该控件被多次使用。我有一个静态ElementTheme
变量CurrentTheme
,在加载该控件时设置。
问题就在这里。Converter
用于判断的TextBlock
用途。但是,事件并不总是在 之前触发,这意味着of将在 old 上进行判断。正确地说,当第一次加载时,加载事件发生在转换器之前。在加载之后,转换器几乎总是在加载之前被调用。CurrentTheme
Foreground
Loading
Converter
Foreground
TextBlock
CurrentTheme
Converter
我应该如何解决这个问题?
- -更新 - -
我使用的转换器:
class RowColorConverter : Windows.UI.Xaml.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return value.Equals(true) ? Helper.GetHighlightBrush() :
PlaylistControl.CurrentTheme == ElementTheme.Dark ? Helper.WhiteSmokeBrush : Helper.BlackBrush;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return null;
}
}
我的使用代码:Interaction.Behaviors
<Interactivity:Interaction.Behaviors>
<Interactions:DataTriggerBehavior
Binding="{x:Bind IsPlaying}"
ComparisonCondition="Equal"
Value="True">
<Interactions:ChangePropertyAction
PropertyName="Foreground"
TargetObject="{Binding ElementName=ArtistTextBlock}"
Value="{StaticResource SystemColorHighlightColor}" />
</Interactions:DataTriggerBehavior>
<Interactions:DataTriggerBehavior
Binding="{x:Bind IsPlaying}"
ComparisonCondition="Equal"
Value="False">
<Interactions:DataTriggerBehavior
Binding="{Binding CurrentTheme}"
ComparisonCondition="Equal"
Value="Dark">
<Interactions:ChangePropertyAction
PropertyName="Foreground"
TargetObject="{Binding ElementName=ArtistTextBlock}"
Value="White" />
</Interactions:DataTriggerBehavior>
<Interactions:DataTriggerBehavior
Binding="{Binding CurrentTheme}"
ComparisonCondition="NotEqual"
Value="Dark">
<Interactions:ChangePropertyAction
PropertyName="Foreground"
TargetObject="{Binding ElementName=ArtistTextBlock}"
Value="Black" />
</Interactions:DataTriggerBehavior>
</Interactions:DataTriggerBehavior>
</Interactivity:Interaction.Behaviors>
解决方案
转换器事件之前的 UWP
对于您的要求,我们建议您使用DataTriggerBehavior
可以比较先前值的。例如。
<Rectangle x:Name="DataTriggerRectangle">
<Interactivity:Interaction.Behaviors>
<Interactions:DataTriggerBehavior Binding="{Binding Value, ElementName=slider}" ComparisonCondition="GreaterThan" Value="50">
<Interactions:ChangePropertyAction TargetObject="{Binding ElementName=DataTriggerRectangle}" PropertyName="Fill" Value="{StaticResource PaleYellowBrush}"/>
</Interactions:DataTriggerBehavior>
<Interactions:DataTriggerBehavior Binding="{Binding Value, ElementName=slider}" ComparisonCondition="LessThanOrEqual" Value="50">
<Interactions:ChangePropertyAction TargetObject="{Binding ElementName=DataTriggerRectangle}" PropertyName="Fill" Value="{StaticResource RoyalBlueBrush}"/>
</Interactions:DataTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Rectangle>
这是您可以参考的官方代码示例。
推荐阅读
- c# - 如何在 C# 中访问 Forms Pro Page html 文本?
- python - 使用 python3 将 .key 格式的私钥转换为 .pem 格式
- arrays - 使用预处理在 O(1) 时间内找到数组中最接近的数字
- button - Shopware 6 - 如何在 SW6 的插件系统配置中添加按钮组件
- c++ - 二进制有什么用 - 或者如果使用相同的值?(分段树)
- flutter - 如何在 Flutter Web 中插入 Adsense 展示广告
- c# - Net Core:对于非空数据类型,自动在请求 API 中强制执行所需的类成员
- discord - discord.py和discord.py的区别[voice]
- python - 如何修复不起作用的python请求分页
- vue.js - 如何使用 vuejs 嵌套组件?