XAML AppThemeBinding无法使用系结来系结ImageButton的来源

pcrecxhr  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(128)

模板定义为:

<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}**无法运作。

那么,实现这一点的正确方法是什么呢?

yvgpqqbh

yvgpqqbh1#

因为AppThemeBinding.Light是标记扩展(继承自IMarkupExtension)属性,而不是BindableProperty,所以不能将DynamicResourceBinding与它一起使用。
因此在这种情况下你不能使用AppThemeBinding。但是你可以使用绑定(没有AppThemeBinding),转换器..(见链接问题的答案),你只需要添加逻辑,根据活动主题有条件地设置合适的图像源,使用:

Application.Current.RequestedTheme;

Binding image source dynamically on xamarin forms
AppThemeBinding source
请求主题

编辑

若要回应主题变更,请使用事件,而不要测试RequestedThemeChanged属性:
How to detect Xamarin Forms System Theme Change

相关问题