我在主 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)
我有包含多个项目的 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 内容可以叠加,虽然性能不是很好,但是还是可以的。