8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

类型为 x:Double 的 OnPlatform 控件无法作为字体大小访问

Trax 2月前

50 0

我在主 Styles.xaml 中定义了 x:Double 类型的 OnPlatform 样式,我想使用它来定义每个平台的不同字体大小。问题是当我想通过特定...

我在主 Styles.xaml 中定义了一种 OnPlatform type 样式 x:Double ,我想用它来定义每个平台的不同字体大小。问题是当我想通过指定标签的字体大小调用资源时, x:Key 标签的字体大小不会改变。

我的 Styles.xaml 文件:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:controls="clr-namespace:ClientApp.Source.Controls"
    xmlns:views="clr-namespace:ClientApp.Source.Views">

    <OnPlatform x:Key="TinyFontSize" x:TypeArguments="x:Double">
        <On Platform="Default" Value="12" />
    </OnPlatform>
...

ContentPage 我创建了以下标签:

...
<Label FontSize="{StaticResource TinyFontSize}" Text="Test" WidthRequest="200"/>
...

但是标签的字体大小不会变为 12 号,只有当我 {StaticResource TinyFontSize} 用数字值替换时才会变为 12 号。

当我在 Styles.xaml 文件中创建以下资源时:

<x:Double x:Key="SmallFontSize">13</x:Double>

它可以正常工作,但是我无法从主 Styles.xaml 中根据操作系统更改值。

我在 Github 的 eShop 存储库中找到了示例: https://github.com/dotnet/eShop/blob/main/src/ClientApp/Views/CheckoutView.xaml .

但即使我签出这个项目并运行 ClientApp,它也不起作用......

使用:
净8.0
Microsoft.Maui.Controls(8.0.21)

帖子版权声明 1、本帖标题:类型为 x:Double 的 OnPlatform 控件无法作为字体大小访问
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Trax在本站《xaml》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我有包含多个项目的 CollectionView。这些项目具有相同的数据模板,它由带有按钮的堆栈布局组成。

    我有包含多个项目的 CollectionView。

    这些项目具有相同的数据模板,由带有按钮的堆栈布局组成。

        <CollectionView ItemSizingStrategy="MeasureFirstItem"
                        ItemsSource="{Binding SaveItems}"
                        SelectionMode="None">
            <CollectionView.ItemTemplate>
                <DataTemplate x:DataType="listItems:MyItemVM">
                    <StackLayout TouchEffect.Command="{Binding SelectedItemCommand}"
                                 TouchEffect.CommandParameter="{Binding .}">
                        <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} />
                    </StackLayout>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    

    当我按下按钮时,会调用 Stacklayout,因为它在视图层次结构中较高。我该如何实现,当我按下按钮外部时,它会调用 StackLayout 命令,而当我按下按钮时,它会调用按钮命令?

    我尝试了 InputTransparent、CascadeInputTransparent 和 TouchEffect.ShouldMakeChildrenInputTransparent 的多种设置。我原本以为 InputTransparent = true 会导致两个命令都起作用,但事实并非如此。当 InputTransparent = true 时,其中一个命令起作用,另一个命令不起作用,反之亦然。

    我曾考虑过使用 Skia 渲染器来检测触摸位置,或者在本机代码中拦截触摸事件,但我希望使用 XAML 有更简单的方法。

    编辑: 我设法使用以下数据模板检测这两个命令:

    <StackLayout>
      <Grid>
        <Grid TouchEffect.Command="{Binding SelectedItemCommand}"
                                 TouchEffect.CommandParameter="{Binding .}" /> 
        <Grid>
             <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} />
        </Gri>
      </Grid>
    </StackLayout>
    

    因为 Grid 内容可以叠加,虽然性能不是很好,但是还是可以的。

  • JubG 2月前 0 只看Ta
    引用 3

    已解决: 我设法使用以下数据模板检测这两个命令:

    <StackLayout>
      <Grid>
        <Grid TouchEffect.Command="{Binding SelectedItemCommand}"
                                 TouchEffect.CommandParameter="{Binding .}" /> 
        <Grid>
             <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} />
        </Gri>
      </Grid>
    </StackLayout>
    

    因为 Grid 内容可以叠加,虽然性能不是很好,但是还是可以的。

  • 官方文档指出, OnPlatform 类定义了一个 Default 属性,可以将其设置为一个将应用于所有平台的值 .

    但是我测试发现 <On Platform="Default"> ,在Android、iOS、Windows三个平台上设置字体大小也不起作用。你可以把这个问题发到 MAUI Github .

    当我设置代码: <On Platform="Andorid"> 和时 <On Platform="iOS"> ,我可以分别在Android平台和iOS平台上成功更改字体大小。

    因此,作为一种解决方法,如果您只是在 Android 和 iOS 平台上运行 MAUI 程序,则可以设计如下代码 styles.xaml

    <ResourceDictionary 
    ...>
    
    <OnPlatform x:Key="TinyFontSize" x:TypeArguments="x:Double">
        <On Platform="Android" Value="12" />
        <On Platform="iOS" Value="12" />
    </OnPlatform>
    ...
    
返回
作者最近主题: