首页 > 解决方案 > 转换器事件之前的 UWP

问题描述

我正在寻找在转换器之前发生的事件。

我的意思是,我有一个 custom UserControl,它包含一个ListView. 它ListViewItem有一些元素,例如<TextBlock Foreground="{x:Bind IsPlaying, Converter={StaticResource RowColorConverter}, Mode=OneWay} />".

该控件被多次使用。我有一个静态ElementTheme变量CurrentTheme,在加载该控件时设置。

问题就在这里。Converter用于判断的TextBlock用途。但是,事件并不总是在 之前触发,这意味着of将在 old 上进行判断。正确地说,当第一次加载时,加载事件发生在转换器之前。在加载之后,转换器几乎总是在加载之前被调用。CurrentThemeForegroundLoadingConverterForegroundTextBlockCurrentThemeConverter

我应该如何解决这个问题?

- -更新 - -

我使用的转换器:

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>

标签: c#xamluwpwin-universal-app

解决方案


转换器事件之前的 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>

这是您可以参考的官方代码示例。


推荐阅读