0

我正在尝试将我的图标绑定到我的 appshell 视图模型中的一个属性。这是第一次工作,我正在观看“flyoutispresented”属性更改以更新图标 - 我正在两个不同的 png 之间切换。该事件每次都会触发,我可以看到视图模型中的属性正在更新,但弹出图像没有改变。它似乎保持第一次渲染时的样子。在我的 appshell 构造函数中,我正在执行以下操作:

模型 = 新 AppShellViewModel(); this.BindingContext = 模型;

        this.PropertyChanged +=
        (obj, args) => model.Shell_PropertyChanged(obj, args);

所以我正在使用视图模型的单个实例,并且该方法被正确调用。有没有人幸运地显示了这样的不同图标?即使我更改了图标属性,我错过了什么,但它没有显示更改?

4

1 回答 1

0

我们可以通过 VisualStateManager status selected 和 normal 来修改图标源。

<Shell.ItemTemplate>
    <DataTemplate >
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.2*" />
                <ColumnDefinition Width="0.8*" />
            </Grid.ColumnDefinitions>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroupList>
                    <VisualStateGroup x:Name="CommonStates">
                        <VisualState x:Name="Normal">
                            <VisualState.Setters>
                                <Setter TargetName="FlyoutItemIcon" Property="Image.Source" Value="icon_about.png"></Setter>
                            </VisualState.Setters>
                        </VisualState>
                        <VisualState x:Name="Selected">
                            <VisualState.Setters>
                                <Setter TargetName="FlyoutItemIcon" Property="Image.Source" Value="cactus_24px.png"></Setter>
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateGroupList>
            </VisualStateManager.VisualStateGroups>
            <Image x:Name="FlyoutItemIcon" Source="{Binding FlyoutIcon}"
                   Margin="5"
                   HeightRequest="45" >
            </Image>
            <Label  Grid.Column="1"
                   Text="{Binding Title}"
                   FontAttributes="Italic"
                   VerticalTextAlignment="Center" />
        </Grid>
    </DataTemplate>
</Shell.ItemTemplate>

更新:

 <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
    <ShellContent  Title="About" Icon="icon_about.png"  Route="AboutPage" ContentTemplate="{DataTemplate local:AboutPage}" />
    
</FlyoutItem>
 
于 2021-11-15T04:09:51.383 回答