Xamarin Xaml 资源样式多条件未使用默认值触发

Posted

技术标签:

【中文标题】Xamarin Xaml 资源样式多条件未使用默认值触发【英文标题】:Xamarin Xaml Resource Style Multicondition not firing with default value 【发布时间】:2019-06-03 08:34:45 【问题描述】:

我的 Xamarin 项目中有一个 XAML 文件,该文件根据 2 个选取器视图的状态显示不同的视图。 Picker View 是一个自定义视图,可让您将 Enumerator 显示为选取器。重要的是,SelectedItem 确实会触发 PropertyChanged 通知。

所以在我的 Xaml 中,我这样定义我的风格:

<Style x:Key="SinglePressureRelativeHumidity" TargetType="ContentView">
            <Style.Triggers>
                <MultiTrigger TargetType="ContentView">
                    <MultiTrigger.Conditions>
                        <BindingCondition Binding="Binding Source=x:Reference Mode, Path=SelectedItem"
                                          Value="x:Static enums:HumidityCalculatorMode.SinglePressure" />
                        <BindingCondition Binding="Binding Source=x:Reference KnownValue, Path=SelectedItem"
                                          Value="x:Static enums:HumidityCalculatorKnownValue.RelativeHumidity" />
                    </MultiTrigger.Conditions>
                    <MultiTrigger.Setters>
                        <Setter Property="IsVisible" Value="true" />
                    </MultiTrigger.Setters>
                </MultiTrigger>
            </Style.Triggers>
        </Style>

这被放置在本地资源字典中。 References Mode 和 KnownValue 指的是自定义选择器视图,它们在同一个 xaml 文件中正确定义。

我后来有一个包含多个 ContentPages 的 StackLayout,每个 ContentPages 看起来类似于以下内容:

<ContentView Style="StaticResource SinglePressureRelativeHumidity"
                                 IsVisible="False">
                        <StackLayout>
                            <controls:TemperatureEntry Title="Temperature" 
                                                       Temperature="Binding HumidityCalculator.InputTemperature, Mode=TwoWay"/>
                            <controls:PressureEntry Title="Test Pressure"
                                                    Pressure="Binding HumidityCalculator.InputPressure, Mode=TwoWay" />
                        </StackLayout>
                    </ContentView>

每个 ContentPage 都有自己的 Style 和不同的条件。

现在的问题是,当我更改任何选择器的值时,ContentPages 会按照您的预期启用或禁用,满足样式的 MultiTrigger 条件的选择器设置为可见,所有其他设置为不可见。

但是,问题是在加载视图时,所有视图都设置为不可见。因此,就好像触发器仅在用户进行更改时进行检查。我已经测试了各种东西。

首先,我尝试在 InitializeComponent 方法之后将两个选择器的值设置为所需的默认值,但没有成功。我确保 Property SelectedItem 使用正确的名称触发 PropertyChanged 通知。

其次,我尝试将 ContentViews 的 isVisible 属性反转为 true,但随后所有内容都可见,这也不是我想要的。

那么如何使用我的默认值触发 MultiTrigger?

【问题讨论】:

【参考方案1】:

我可以通过将BindingCondition 直接绑定到 Pickers 为其设置值的模型来解决此问题。

我不知道为什么这解决了这个问题。

【讨论】:

以上是关于Xamarin Xaml 资源样式多条件未使用默认值触发的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms 使用 XAML 显示来自嵌入式资源的图像

Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容

如何自定义TimePicker的样式

Xamarin Forms Switch Toggled 事件未与视图模型绑定

Xamarin Forms 渲染器未响应事件更改

未显示 xaml 设计器或预览器