模板定义为:
<ContentPage.Resources>
<DataTemplate x:Key="MenuOptionTemplate">
<controls:MenuButtonControl />
</DataTemplate>
</ContentPage.Resources>
<ScrollView Orientation="Vertical">
<FlexLayout
AlignContent="Start"
AlignItems="Start"
BindableLayout.ItemTemplate="{StaticResource MenuOptionTemplate}"
BindableLayout.ItemsSource="{Binding MenuOptions}"
JustifyContent="SpaceEvenly"
VerticalOptions="Start"
Wrap="Wrap" />
</ScrollView>
MenuButtonControl定义为:
...
<ImageButton
Source="{AppThemeBinding Light={Binding LightImageSource},
Dark={Binding DarkImageSource}}"/>
...
MenuOptions是基于用户的角色动态生成的,但基本上每个菜单选项都是这样创建的:
new MenuOption {
Title = "My Title",
LightImageSource = "sample_light",
DarkImageSource = "sample_dark"
}
**{系结LightImageSource}**无法运作。
那么,实现这一点的正确方法是什么呢?
1条答案
按热度按时间yvgpqqbh1#
因为
AppThemeBinding.Light
是标记扩展(继承自IMarkupExtension
)属性,而不是BindableProperty
,所以不能将DynamicResource
或Binding
与它一起使用。因此在这种情况下你不能使用
AppThemeBinding
。但是你可以使用绑定(没有AppThemeBinding),转换器..(见链接问题的答案),你只需要添加逻辑,根据活动主题有条件地设置合适的图像源,使用:Binding image source dynamically on xamarin forms
AppThemeBinding source
请求主题
编辑
若要回应主题变更,请使用事件,而不要测试RequestedThemeChanged属性:
How to detect Xamarin Forms System Theme Change