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资源文件内容