XAML 在 ListView 中具有来自 AppResources 的 Labeltext

Posted

技术标签:

【中文标题】XAML 在 ListView 中具有来自 AppResources 的 Labeltext【英文标题】:XAML Having a Labeltext from AppResources inside a ListView 【发布时间】:2021-08-29 20:36:39 【问题描述】:

我尝试在 XAML 中的 Listview 中填充 Labeltext。但我想要来自 AppResources 的 Labeltext。我确信我在某个地方忘记了一个微小的细节,比如 using 或 namespace。

还有,这是 XAML:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Arbeitszeitrechner_Forms.Views.WorkdayListPage"
         Style="StaticResource PageStyle"
         Title="Binding Title"
         xmlns:local="clr-namespace:Arbeitszeitrechner_Forms.ViewModels"  
         xmlns:model="clr-namespace:Arbeitszeitrechner_Forms.Models"
         xmlns:appres="clr-namespace:Arbeitszeitrechner_Forms.Resources">

<!--Titel im WorkdaysViewModel zugewiesen und im AppResources definiert-->

<RefreshView x:DataType="local:WorkdaysViewModel" Command="Binding LoadWorkdaysCommand" IsRefreshing="Binding IsBusy, Mode=TwoWay">
    <CollectionView x:Name="WorkdaysListView"
            ItemsSource="Binding Workdays"
            SelectionMode="None">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <StackLayout Padding="10" x:DataType="model:WorkdayList">
                    <Label
                        LineBreakMode="NoWrap" 
                        Style="DynamicResource ListItemTextStyle" 
                        FontSize="16">
                        <Label.Text>
                            <MultiBinding StringFormat="0 1:d">
                                <Binding Path="Day" />
                                <Binding Path="Date" />
                            </MultiBinding>
                        </Label.Text>
                    </Label>
                    <StackLayout Orientation="Horizontal">
                        <Label x:Name="LblTotalTime"/>    <!-- **************THIS LABEL IS THE **** THING THAT I CAN'T POPULATE****************-->
                        <Label Text="Binding TimeTotal, StringFormat='0:hh:0:mm'"
                        LineBreakMode="NoWrap"
                        Style="DynamicResource ListItemTextStyle"
                        FontSize="13" />
                    </StackLayout>
                    <StackLayout.GestureRecognizers>
                        <TapGestureRecognizer 
                            NumberOfTapsRequired="1"
                            Command="Binding Source=RelativeSource AncestorType=x:Type local:WorkdaysViewModel, Path=WorkdayTapped"       
                            CommandParameter="Binding .">
                        </TapGestureRecognizer>
                    </StackLayout.GestureRecognizers>
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</RefreshView>

以及后面的 xaml.cs 代码:

namespace Arbeitszeitrechner_Forms.Views

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class WorkdayListPage : ContentPage

    WorkdaysViewModel _viewModel;

    public WorkdayListPage()
    
        InitializeComponent();
        BindingContext = _viewModel = new WorkdaysViewModel();
        //Normally i would do something like this here, but for some reason i can't:
        //LblTotalTime.Text = AppResources.LblTotalTime
    

    protected override void OnAppearing()
    
        base.OnAppearing();
        _viewModel.OnAppearing();
    


Bot 要求我提供更多细节以补偿我复制的大量代码。所以请忽略我在这里发短信的胡言乱语。

【问题讨论】:

【参考方案1】:

使用x:Static 扩展名

<Label Text="x:Static resources:AppResources.LblTotalTime" />

【讨论】:

哇,谢谢!但我还必须添加资源关键字的路径:xmlns:resources="clr-namespace:Arbeitszeitrechner_Forms.Resources"

以上是关于XAML 在 ListView 中具有来自 AppResources 的 Labeltext的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 ListView 在同一行中显示来自 ObservableCollection 不同元素的两个不同数据

有没有办法在 xaml 中隐藏 ListView?

Xamarin 表单 ListView ItemTapped/ItemSelected 命令绑定在 XAML

Xamarin表单ListView ItemTapped / ItemSelected在XAML上绑定命令

选择器 ItemSource 值未绑定在 XAML ListView 中

列表视图来自另一个列表视图中选择的对象的项目