uwp 相关问题

通用Windows平台是运行Windows 10的所有设备的通用软件平台。此标签应用于在任何支持的设备系列上开发UWP应用程序的问题。此外,应使用所使用语言的标签(C#,XAML),或者如果使用winjs,您还可以使用winjs标签。如果问题适用于设备系列,则还应使用特定设备标签(例如,windows-10-mobile)。

在 UWP 中为 ListView 数据模板处理数组项

我有以下 DataTemplate,用于我的 UWP 应用程序中的自定义 ListView 布局: 我有以下 DataTemplate,我在我的 UWP 应用程序中用于自定义 ListView 布局: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:contract7Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)" xmlns:utils="using:ClassevivaPCTO.Utils" x:Class="ClassevivaPCTO.Controls.DataTemplates.AgendaEventListViewDataTemplate" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"> <utils:AgendaEvent x:Key="AgendaEvent"/> <DataTemplate x:Key="AgendaEventListViewDataTemplate" x:DataType="utils:AgendaEvent"> <RelativePanel> <TextBlock x:Name="eventTitle" TextWrapping="Wrap" MaxWidth="500" Text="{x:Bind subjectDesc}" Style="{ThemeResource BaseTextBlockStyle}" Margin="12,6,0,0" /> <TextBlock RelativePanel.RightOf="eventTitle" x:Name="eventType" TextWrapping="Wrap" MaxWidth="500" Text="{x:Bind evtCode}" Style="{ThemeResource BaseTextBlockStyle}" Margin="12,6,0,0" /> </RelativePanel> </DataTemplate> </ResourceDictionary> TextBlock 项的 Text 值绑定到名为 AgendaEvent 的自定义数据类型类: public class AgendaEvent { public int evtId { get; set; } public string evtCode { get; set; } public DateTime evtDatetimeBegin { get; set; } public DateTime evtDatetimeEnd { get; set; } public bool isFullDay { get; set; } public string notes { get; set; } public string authorName { get; set; } public string classDesc { get; set; } public object subjectId { get; set; } public object subjectDesc { get; set; } public object homeworkId { get; set; } } 这是我的列表视图: <ListView x:Name="ListViewAgendaEvents" SelectionMode="Single" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemTemplate="{StaticResource AgendaEventListViewDataTemplate}" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled"> </ListView> 从我从自定义数组工厂获得的AgendaEvent对象数组中,我将ItemsSource设置为ListView: ListViewAgendaEvents.ItemsSource = customArray.AgendaEvents; 我意识到,根据我的需要,eventTitle TextBlock 需要将属性 authorName 和 subjectDesc 组合在一起作为带有自定义装饰字符的字符串。例如:authorName + " - wrote: " + subjectDesc. 并不总是 subjectDesc 可用,所以我需要通过各种条件检查来动态调整 eventTitle 文本块。 我考虑过使用适配器类,就像 Android 的列表视图一样,但是使用 UWP 的数据绑定,如何完成我想做的事情是非常混乱的。 是否有一种简单直接的方法来组合自定义字符串中的属性并在显示 UWP 中的 ListView 中使用的 DataTemplate 的属性之前执行检查? 更新3 UWP 不支持多个数据绑定,它只接受单个值。如果您不想更改 Xaml 绑定,请尝试在 DataModel 中进行。在 AgendaEvent 类中创建一个新的消息字符串并进行检查将是最简单的方法。 public class AgendaEvent { public int evtId { get; set; } public string evtCode { get; set; } public DateTime evtDatetimeBegin { get; set; } public DateTime evtDatetimeEnd { get; set; } public bool isFullDay { get; set; } public string notes { get; set; } public string authorName { get; set; } public string classDesc { get; set; } public object subjectId { get; set; } public object subjectDesc { get; set; } public object homeworkId { get; set; } public string messageString { get { if (subjectDesc == null) { return authorName; } return authorName + " - wrote: " + subjectDesc; } } } Xaml: <TextBlock x:Name="eventTitle" TextWrapping="Wrap" MaxWidth="500" Text="{x:Bind messageString}" Style="{ThemeResource BaseTextBlockStyle}" Margin="12,6,0,0" /> 更新2: 我想出了另一种方法,应该也能达到你想要的效果。它需要不同的模板。您只需要根据使用 DataTemplateSelector Class 的值选择不同的DataTemplate 代码隐藏: public class MyDataTemplateSelector : DataTemplateSelector { public DataTemplate Normal { get; set; } public DataTemplate Unusual { get; set; } protected override DataTemplate SelectTemplateCore(object item) { AgendaEvent agendaEvent = (AgendaEvent)item; // if you have other reuqirements, just need to add more check and different templates if (agendaEvent.subjectDesc != null) { return Normal; } else { return Unusual; } } } Xaml: <Page.Resources> <!--tempalte for normal value--> <DataTemplate x:Key="NormalItemTemplate" x:DataType="local:AgendaEvent"> <RelativePanel> <TextBlock x:Name="eventTitle" TextWrapping="Wrap" MaxWidth="500" Margin="12,6,0,0"> <Run Text="{x:Bind authorName}"/> <Run Text=" - wrote: "/> <Run Text="{x:Bind subjectDesc}"/> </TextBlock> <TextBlock RelativePanel.RightOf="eventTitle" x:Name="eventType" TextWrapping="Wrap" MaxWidth="500" Text="{x:Bind evtCode}" Margin="12,6,0,0" /> </RelativePanel> </DataTemplate> <!--template for null value--> <DataTemplate x:Key="UnusualItemTemplate" x:DataType="local:AgendaEvent"> <RelativePanel> <TextBlock x:Name="eventTitle" TextWrapping="Wrap" MaxWidth="500" Margin="12,6,0,0"> <Run Text="{x:Bind authorName}"/> </TextBlock> <TextBlock RelativePanel.RightOf="eventTitle" x:Name="eventType" TextWrapping="Wrap" MaxWidth="500" Text="{x:Bind evtCode}" Margin="12,6,0,0" /> </RelativePanel> </DataTemplate> <local:MyDataTemplateSelector x:Key="MyDataTemplateSelector" Normal="{StaticResource NormalItemTemplate}" Unusual="{StaticResource UnusualItemTemplate}"/> </Page.Resources> <Grid> <ListView x:Name="ListViewAgendaEvents" SelectionMode="Single" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemTemplateSelector="{StaticResource MyDataTemplateSelector}" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled"> </ListView> </Grid> 更新: 您可以尝试创建自定义 ValueConverter 来完成这项工作。您可以检查 Converter 事件中的绑定值并自定义输出绑定字符串。 代码隐藏: public class TextBlockValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { if (value == null) { return ""; } else { return " - wrote: " + value.ToString(); } } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } } Xaml: <Page.Resources> <local:TextBlockValueConverter x:Key="TextBlockValueConverter"/> </Page.Resources> <TextBlock x:Name="eventTitle" TextWrapping="Wrap" MaxWidth="500" Margin="12,6,0,0"> <Run Text="{x:Bind authorName}"/> <Run Text="{x:Bind subjectDesc, Converter={StaticResource TextBlockValueConverter} }"/> </TextBlock> 老 对于 UWP 中的 ListView 中使用的 DataTemplate,是否有一种简单直接的方法来组合自定义字符串中的属性? 既然你用的是TextBlock,那么解决方法就很简单了。您只需要在 Run 中使用 TextBlock。并将你想要的文字绑定到不同的Run. 你只需要像这样更改代码: <TextBlock x:Name="eventTitle" TextWrapping="Wrap" MaxWidth="500" Margin="12,6,0,0"> <Run Text="{x:Bind authorName}"/> <Run Text=" - wrote: "/> <Run Text="{x:Bind subjectDesc}"/> </TextBlock> 结果看起来像: 根据 Roy Li 的回答,我使用了以下最适合我的需求并且部分类似于 Android 的适配器架构的方法: 这是一个单独的类,充当 xaml 列表视图项的“适配器”或“视图模型”。在构造函数中,它采用具有我要处理的属性的原始对象类型: public class AgendaEventAdapter { public AgendaEvent CurrentObject; public string Title { get { if (string.IsNullOrEmpty(CurrentObject.subjectDesc)) { return CurrentObject.authorName; } else { return CurrentObject.subjectDesc + " (" + CurrentObject.authorName + ")"; } } } public string EventType { get { return "[" + CurrentObject.evtCode + "]"; } } public string Notes => CurrentObject.notes; public AgendaEventAdapter(AgendaEvent ev) { CurrentObject = ev; } } 这是listview中使用的DataTemplate(注意DataType现在是适配器类AgendaEventAdapter): <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:contract7Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)" xmlns:converters="using:ClassevivaPCTO.Converters" xmlns:utils="using:ClassevivaPCTO.Utils" xmlns:adapters="using:ClassevivaPCTO.Adapters" x:Class="ClassevivaPCTO.Controls.DataTemplates.AgendaEventListViewDataTemplate" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"> <converters:DateTimeToHourConverter x:Key="DateTimeToHourConverter" /> <DataTemplate x:Key="AgendaEventListViewDataTemplate" x:DataType="adapters:AgendaEventAdapter"> <RelativePanel> <TextBlock x:Name="titoloEvento" TextWrapping="Wrap" MaxWidth="500" Text="{x:Bind Title}" Style="{ThemeResource BaseTextBlockStyle}" Margin="6,6,0,0" /> <TextBlock RelativePanel.RightOf="titoloEvento" x:Name="tipoEvento" TextWrapping="Wrap" MaxWidth="500" Text="{x:Bind EventType}" Style="{ThemeResource BaseTextBlockStyle}" Margin="6,6,0,0" /> <TextBlock RelativePanel.Below="titoloEvento" x:Name="dataStart" Text="{x:Bind CurrentObject.evtDatetimeBegin, Converter={StaticResource DateTimeToHourConverter}}" FontStyle="Italic" Style="{ThemeResource BodyTextBlockStyle}" Margin="6,0,0,0" /> <TextBlock RelativePanel.RightOf="dataStart" RelativePanel.Below="titoloEvento" x:Name="placeholderData" Text="-" FontStyle="Italic" Style="{ThemeResource BodyTextBlockStyle}" Margin="6,0,6,0" /> <TextBlock RelativePanel.RightOf="placeholderData" RelativePanel.Below="titoloEvento" x:Name="dataEnd" Text="{x:Bind CurrentObject.evtDatetimeEnd, Converter={StaticResource DateTimeToHourConverter}}" FontStyle="Italic" Style="{ThemeResource BodyTextBlockStyle}" Margin="0,0,0,0" /> <TextBlock RelativePanel.Below="dataStart" x:Name="descriptionEvent" TextWrapping="Wrap" Text="{x:Bind CurrentObject.notes}" Style="{ThemeResource BodyTextBlockStyle}" Margin="6,6,0,6" /> </RelativePanel> </DataTemplate> </ResourceDictionary> 这是为每个项目创建适配器类实例的代码,然后将其传递给列表视图的ItemsSource属性: // Wrap each AgendaEvent object in an instance of AgendaEventAdapter and handle null case var eventAdapters = overviewResult.AgendaEvents ?.Select(evt => new AgendaEventAdapter(evt)) .ToList(); ListViewAgendaDate.ItemsSource = eventAdapters; 这是我的问题的最佳解决方案,因为拥有一个单独的模型类有助于减少代码中的混乱,并且在使用与项目视图绑定的可观察对象的情况下也很有用。

回答 2 投票 0

如何从 UWP 应用程序关闭 FullTrustProcess

我有一个 UWP 应用程序,它在 UWP 应用程序关闭时启动 FullTrustProcess: MainPage.xaml.cs(UWP 应用程序): 私有异步无效 HandleSystemNavigationManagerCloseRequested(对象发送者,

回答 0 投票 0

更改笔刷的 InkDrawingAttributes 不透明度

我使用颜色选择器用笔绘图,但使用此代码我无法更改笔颜色的不透明度: InkDrawingAttributes inkDrawingAttributes = InkCanvas.InkPresenter.CopyDefaultDrawingAttri...

回答 2 投票 0

Xamarin Forms TapGestureRecognizer 不适用于 UWP

我有一个 Xamarin Forms 多平台应用程序,它使用 TapGestureRecognizer 来访问详细信息页面。我让它在 Android 和 iOS 上成功运行,但是现在我被要求拥有 UWP 版本。我有

回答 0 投票 0

如何在GridView中设置/获取高亮项?

正在开发一个使用 GridView 显示图像集合的 WinUI 应用程序。 试图弄清楚如何获取/设置当前通过键盘导航突出显示的项目。 我看到当我选择...

回答 1 投票 0

在 UWP 中从后台线程显示 ContentDialog

我有以下代码在我的 UWP 应用程序的后台线程中显示 ContentDialog: 等待核心窗口 .GetForCurrentThread() .Dispatcher.RunAsync( CoreDispatcherPriority.Normal...

回答 1 投票 0

如何确定 UWP 应用程序是否在打开窗口的情况下运行?

我尝试使用 IPackageDebugSettings.GetPackageExecutionState,但它返回 PES_RUNNING 尽管没有打开应用程序窗口,并且在任务管理器“状态”列中,exe 显示“

回答 0 投票 0

在 UWP 中,我可以检查一个 StorageFolder 是否是另一个 StorageFolder 的父级吗?

我有一个应用程序可以递归管理用户选择的 StorageFolder 中的文件和文件夹(使用 FolderPicker)。现在用户可以将多个文件夹添加到管理列表中。但是现在我的应用程序......

回答 1 投票 0

C# UWP 控制台应用程序无法使用 BackgroundDownloader 关闭

我有一个 UWP WRC 库,我需要从命令行应用程序对其进行测试。当我尝试开始下载时它挂起。 我将这个简单的 UWP C# 控制台应用放在一起,它是我使用 Pieter Nijs &q 创建的...

回答 0 投票 0

如何在 uwp mvvm 中正确使用页面?

如何在 uwp mvvm 中使用页面? (ContentPrecenter-用户控件?) 如何覆盖 app.xaml.cs 中的 OnLauncher?

回答 0 投票 0

Windows UWP 中 BLE 特征的读取操作返回 20 字节的最大缓冲区

背景:我在STM32蓝牙模块上有一个定制的蓝牙嵌入式C应用程序。该应用程序有多个服务,每个服务都具有多个不同长度的特征。 我正在写一个 C# PC

回答 0 投票 0

Polly 策略句柄 Refit ApiException with DI AddPolicyHandler

我在我的 UWP 应用程序中使用 Refit 客户端和依赖注入的 Polly 策略设置了以下服务集合: var serviceCollection = new ServiceCollection(); 服务集合 .

回答 2 投票 0

UWP 中的合并词典

UWP 应用程序启动时,我收到问题“无法找到具有名称/键 TextBlockForeground [行:20 位置:37] 的资源”。 App.xaml 中的 ResourceDctionary.MergedDictionaries

回答 0 投票 0

为什么 UWP 应用程序不能在 Visual Studio 之外运行?

作为测试,我使用 C# 在 Visual Studio 17.5.3 中创建了一个单页 UWP 应用程序。 我将几个组件放到 MainPage.xaml 中,然后点击运行按钮。 应用程序加载,您会看到主页。 然而……

回答 1 投票 0

UWP + SSH.Net c# 如何使用正确的颜色将 ANSI 字符串从 shellstream 输出到文本框/richeditbox

我在 UWP 程序中使用 ssh.net。我很难让它输出一个 ANSI 字符串到一个带有正确颜色的 richeditbox,就像你使用 putty 之类的东西看到的那样。输出看起来...

回答 0 投票 0

WinUI3 应用程序在 Debug、Release 中运行,但在 SideLoaded 或 Published to Store 时失败

我在使用 WinUI 3 应用程序时遇到了一些本机异常。作为序言,我之前已经在没有太多戏剧性的情况下将应用程序发布到 Microsoft Store(Alt ...

回答 1 投票 0

当我将事件添加到 DataTemplate 或其他地方时,为什么我的 Drag 事件没有被触发?

我正在开发一个 UWP 应用程序,我正在将一些项目从 Grid 拖到包含 ListView 的 StackPanel 中。我的目标是在 ListView 中显示类别,并对拖动的网格重新分类...

回答 1 投票 0

winrt: name must be a namespace name error

我正在阅读有关构建 UWP winrt 应用程序的文档,但不幸的是它似乎没有正确设置。 我创建了一个显示 56 个错误的新核心应用程序,以“名称

回答 0 投票 0

如何验证输入到文本框中的值并防止切换到另一个控件?

我正在开发一个 uwp 桌面应用程序,它必须验证在文本框中输入的值,以便它们是双精度类型。如果不是,则焦点必须保留在当前控件上。我尝试了...

回答 2 投票 0

通用 Windows 平台 - VS2022 UWP 空白项目被 AppLocker 阻止

我正在使用 Win10 Visual Studio 2022,我创建了一个新的 C# Windows UWP 空白项目。 创建后我可以成功构建它,但是当它尝试部署时出现此错误。 错误 DEP0700:注册...

回答 0 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.