如何在代码后面找到带有密钥的资源?
也相当于{DynamicResource}/{StaticResource}标记扩展。
在 WPF 中,解决方案是:
Style=(Style)FindResource("MyStyleKey");
How to do this in MAUI?,因为 FindResource 不存在。
我不想手动挖掘 Application.Resources 中的所有合并字典
我想知道为什么还没人问,我是否忽略了这个简单的解决方案?
编辑1:
哈哈,好的,我没有想到要检查 ResourceDictionary 是否递归搜索自身。但这只是工作的一半。你仍然需要向后遍历当前元素树。
因此,为什么 FindResource 没有默认实现的问题仍然是合理的?或者其他地方是否已经有一个函数可以做到这一点?
编辑2:
我把问题带到了更重要的一点:如何找到资源,而不是如何分配。
最初的问题是“如何在代码后面分配带有键的样式”
在 .NET MAUI 中,有一种很好的方法可以通过文件夹Styles.xaml下的文件全局处理控件的样式Resources/Styles。
有没有办法Entry通过文件向所有控件添加圆角Styles.xaml,而不是在文件中单独处理ContentPage XAML?
Entry以下是.NET MAUI 应用程序中控件的开箱即用的标准样式。有没有办法在这里添加圆角?据我所知,我们现在通过控制来处理圆角Border。我可以定义一个边框Styles.xaml,然后在样式中引用它以进行Entry控制吗?
<Style TargetType="Entry">
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
<Setter Property="BackgroundColor" Value="{StaticResource FormElementBackground}" />
<Setter Property="FontFamily" Value="OpenSansRegular"/>
<Setter Property="FontSize" Value="14" />
<Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter> …Run Code Online (Sandbox Code Playgroud) 我的 .NET MAUI 应用程序中有一个CollectionView,我将其放置在 .NET MAUI 应用程序中RefreshView。当我调用 API 来填充 this 时CollectionView,我会缓存数据,这样我就不必在每次用户点击此页面时继续进行 API 调用。
为了简化我的代码,我private在视图模型中创建了一个调用 API 的方法。视图模型如下所示:
public partial MyViewModel : BaseViewModel
{
ObservableCollection<MyModel> MyData { get; } = new();
[RelayCommand]
async Task RefreshData()
{
IsBusy = true;
await GetData(true);
IsBusy = false;
}
private async Task GetData(bool shouldGetFreshData)
{
// Makes API call to get data, then assigns it to MyData collection
}
public async void Init()
{
IsBusy = true;
await …Run Code Online (Sandbox Code Playgroud) 有没有办法在新的 .net Maui 中为移动应用程序(Android、Ios 和 WinApp)创建可拖动项目的布局?
我一直在寻找该平台可以做什么,但目前还没有找到任何东西。
我想根据主题(即浅色与深色)更改 xaml 中 ImageButton 的来源。我收到 System.NullReferenceException“未将对象引用设置为对象的实例。” 当我使用以下内容时:
<ImageButton
Grid.Row="1"
Margin="10"
Command="{Binding CreateCommand}"
Source="{AppThemeBinding Light=add_box_black_48dp.svg, Dark=add_box_light_48dp.svg}"
HorizontalOptions="End"
VerticalOptions="End"/>
Run Code Online (Sandbox Code Playgroud)
如果我将源更改为以下内容,一切正常
Source="add_box_white_48dp"
Run Code Online (Sandbox Code Playgroud)
我可以使用 AppThemeBinding 以这种方式更改 ImageButton 源吗?
<于 2022 年 6 月 4 日编辑,以显示有效案例和无效案例的 xaml。还更改了 svg 文件的名称以反映浅色和深色情况>
我正在使用 Visual Studio Community 2022(64 位)- 预览版 17.3.0 预览版 1.1
此 ImageButton xaml 引发异常:
<ImageButton
Margin="10"
Command="{Binding CreateNewAccountCommand}"
Source="{AppThemeBinding Light=add_light.svg, Dark=add_dark.svg}"
HorizontalOptions="End"
VerticalOptions="End"
BackgroundColor="#376489"
CornerRadius="8"
WidthRequest="36"
HeightRequest="36">
</ImageButton>
Run Code Online (Sandbox Code Playgroud)
此 ImageButton xaml 有效且不会引发异常
<ImageButton
Margin="10"
Command="{Binding CreateNewAccountCommand}"
Source="add_light.svg"
HorizontalOptions="End"
VerticalOptions="End"
BackgroundColor="#abdbe3"
CornerRadius="8"
WidthRequest="36"
HeightRequest="36">
</ImageButton>
Run Code Online (Sandbox Code Playgroud)
这也有效并且不会抛出异常 …
参考之前的问题.Net maui:如何在绑定中引用颜色?
我有一个 CollectionView,绑定到从 SQLite 数据库填充的 ObservableCollection。
我想根据数据库表中保存的颜色字符串显示每一行
但是,我只想将颜色值存储为字符串。
是否可以将此字符串转换为绑定内的颜色或调用函数来执行此操作?
例如:
<Label Text="{Binding Name}"
TextColor="{Binding ConvertStringToColor(ItemColor)}" />
Run Code Online (Sandbox Code Playgroud)
其中 ItemColor 是我的集合模型中的字符串,可以绑定到。
我正在尝试在.Net MAUI中制作一个包含渐变背景和动画徽标的启动屏幕。
我看过有关如何制作简单的飞溅的教程:
<MauiSplashScreen Include="Resources\Images\splashscreen.svg" Color="#512BD4" />
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何在不使用完整的现成背景的情况下自定义启动画面,因为我不知道不同平台的完美尺寸是多少。
一些例子:
谢谢。
注意。
我在 Xamarin.Forms 中经常使用Factor ofrelativeLayout ,这样我的应用程序 UI就可以在任何设备上正确缩放。不再建议使用RelativeLayout,并且不提供替代品,所以我想知道什么技术可以表明例如我希望xaml元素占据其父元素(容器)的80%?我应该根据设备分辨率在运行时计算容器的实际宽度/高度吗?或者有更好的解决方案?我在 .Net Maui 中找不到任何与relativelayout+factor允许我在Xamarin.Forms中做的事情相近的东西。
我是移动开发新手,正在编写 .NET MAUI Android 应用程序,该应用程序的一部分需要能够同步文件。该设备没有网络连接,将对接(连接到 PC),从 PC 获取在设备上创建的文件,然后 PC 会将新文件加载到设备。此同步过程将通过单独的桌面应用程序进行。
查看有关文件系统助手的文档,我没有看到明确记录的方法来将文件写入连接设备时在文件资源管理器中可见的目录。
我正在寻找一种写入目录的方法,该目录一旦停靠就可见。我不想打开一个对话框让用户选择保存位置,因为我希望该位置始终保持一致。关于在哪里可以获取“公共”文件夹的文件路径来读取和写入文件的任何想法?
.Net 毛伊岛
我将一个对象传递给页面/视图模型,但它在构造函数中为空。我需要从中派生一些数据以传回 XAML 页面,但我不知道它何时或如何在视图模型中设置。
我相信这里使用的 [QueryProperty] 使用 MVVM Community Toolkit 在幕后发挥了一些作用
[QueryProperty("OpenJob", "OpenJob")]
public partial class NoteAvailabilityViewModel : BaseViewModel {
[ObservableProperty]
OpenJob openJob;
public List<String> jobDates;
public NoteAvailabilityViewModel(JobsService jobsService) {
if (openJob == null) {
Debug.Write("its null");
//It's always null here
//When, how is it set so I can access it in the viewmodel?
}
else {
Debug.Write("its not null");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在导航到此页面的页面中,我有一个在单击按钮时触发的 ICommand
[ICommand]
public static void NoteAvailabilityAsync(OpenJob openJob) {
Shell.Current.GoToAsync($"{nameof(NoteAvailabilityPage)}", true, new Dictionary<string, object> {
{"OpenJob", …Run Code Online (Sandbox Code Playgroud)