此标记用于特定于Windows-8上的Windows-Store-Apps的XAML UI框架。 WinRT-XAML是一般XAML规范的子集,也是Windows-Phone-8 XAML的超集。
FileOpenPicker 在 WinUI 3 中返回内存错误
参考我之前的问题 我正在使用 C++ 探索 WinUI3,并努力在不同的社区门户上查找信息和材料。 我开发了一个演示应用程序,它有一个窗口和 2
我希望屏幕阅读器(Narrator、JAWS、NVDA)能够在我的基于 WinRT/C++ WinUI3 XAML 的窗口上大声朗读某些标签的文本,以便视力受损的用户可以了解
我正在使用像这样的WinUI3 ListView来加载文件列表: 我正在使用像这样的 WinUI3 ListView 来加载文件列表: <ListView ItemTemplate="{StaticResource Template2}" ItemsSource="{x:Bind Files,Mode=OneWay}" IsItemClickEnabled="True" x:Name="List2" SelectionMode="Multiple" /> <DataTemplate x:Key="Template2" x:DataType="local:FileItem"> <Grid> .... TextBlocks that bind to properties in FileItem </Grid> </DataTemplate> 现在,如何配置我的 DataTemplate 以便默认选择部分(或全部)项目? 我应该使用的数据模板中有特殊值吗? 您可以在 ListViewItem 中使用 ItemTemplate。 假设您的 FileItem 看起来像这样: public partial class FileItem : ObservableObject { [ObservableProperty] private string _name = string.Empty; [ObservableProperty] private bool _isSelected; } 和你的 ViewModel: public partial class MainPageViewModel : ObservableObject { [ObservableProperty] private ObservableCollection<FileItem> _files = new() { new FileItem { Name = "File1" }, new FileItem { Name = "File2", IsSelected = true, }, new FileItem { Name = "File3"}, }; } 在 XAML 中: <Page.Resources> <DataTemplate x:Key="Template2" x:DataType="local:FileItem"> <ListViewItem IsSelected="{x:Bind IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> <TextBlock Text="{x:Bind Name, Mode=OneWay}" /> </ListViewItem> </DataTemplate> </Page.Resources> <ListView Grid.Row="1" IsItemClickEnabled="True" ItemTemplate="{StaticResource Template2}" ItemsSource="{x:Bind ViewModel.Files, Mode=OneWay}" SelectionMode="Multiple" /> 但不幸的是,这不起作用,因为加载时 ListViewItem 会将其 IsSelected 属性重置为 false 。我不确定这是一个错误还是设计使然。 作为解决方法,您可以在加载每个 ListViewItem 后进行绑定: <Page.Resources> <DataTemplate x:Key="Template2" x:DataType="local:FileItem"> <ListViewItem Loaded="ListViewItem_Loaded"> <TextBlock Text="{x:Bind Name, Mode=OneWay}" /> </ListViewItem> </DataTemplate> </Page.Resources> 然后在代码隐藏中: private void ListViewItem_Loaded(object sender, RoutedEventArgs e) { if (sender is not ListViewItem listViewItem) { return; } listViewItem.SetBinding( ListViewItem.IsSelectedProperty, new Binding { Path = new PropertyPath("IsSelected"), Mode = BindingMode.TwoWay, Source = listViewItem.DataContext, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, }); } 顺便说一句,我正在为 ViewModel 使用 CommunityToolkit.Mvvm NuGet 包,但我希望这能让您了解如何解决问题。
我需要将我的应用程序放入 Windows 应用商店才能使用 WNS 服务吗?
场景: 我正在构建一个 Windows 应用商店之外的 Windows 8 应用程序。在这里我希望使用 WNS 接收通知。我有一个发布者,它将根据用户操作生成事件......
在XAML中我这样做: 我如何在代码隐藏中做同样的事情? 在 XAML 中我这样做: <Button Style="{StaticResource NavigationBackButtonNormalStyle}" /> 如何在代码隐藏中做同样的事情? 页面级Resources对象能够查找本地、应用级、静态和主题资源。这意味着您只需执行以下操作: foo2.Style = this.Resources["NavigationBackButtonNormalStyle"] as Style; 祝你好运! 在设计时,尝试使用 Resources[key] 解析“系统资源”似乎将无法找到资源并返回 null。例如,要使用 Style 获取 TextBox 的基数 Resources[typeof(TextBox)] 将返回 null。 相反,请使用 TryFindResource(key),因为这将首先尝试 Resources[key],然后尝试搜索“系统资源”并返回您要查找的内容(根据 MSDN 和 参考源)。 换句话说,试试这个: var style = Application.Current.TryFindResource(key) as Style; 试试这个 Application.Current.Resources["key"] 这是一个可以使用的通用帮助器类。走这条路线的优点是,您将能够使用相同的帮助器来获取其他类型的资源(例如画笔或数据模板) public static class Helper { public static T Get<T>(string resourceName) where T : class { return Application.Current.TryFindResource(resourceName) as T; } } 以及如何在代码中使用: yourButton.Style = Helper.Get<Style>("NavigationBackButtonNormalStyle"); 如果你想获得画笔资源,你可以使用 ItemTemplate = Helper.Get<DataTemplate>("MyDataTemplate"); 如果您在 ViewModel 中工作,您将无法使用上面的答案。 要更新 Eternal21 的答案,您可以这样: public static T Get<T>(string resourceName) { try { var success = Application.Current.Resources.TryGetValue(resourceName, out var outValue); if(success && outValue is T) { return (T)outValue; } else { return default(T); } } catch { return default(T); } } 注意这里缺少 where 子句。我不想将它限制为类,所以我也可以将它与 Color 一起使用,它是一个结构......所以删除了它。
我正在尝试更改复选框文本的颜色,但它不起作用。这是我尝试过的: 我正在尝试更改复选框文本的颜色,但它不起作用。这是我尝试过的: <CheckBox x:Name="OptionCheckBox" Foreground="#FFFFFFF" Content="PDF"> <CheckBox.Resources> <Style TargetType="CheckBox"> <Setter Property="Foreground" Value="Blue" /> <Setter Property="FontSize" Value="16" /> <Setter Property="Padding" Value="5" /> <Setter Property="HorizontalAlignment" Value="Left" /> </Style> </CheckBox.Resources> </CheckBox> 为什么不起作用,我可以用什么代替? 您可以按照默认的 WinUI3 控件样式文件在哪里?中找到默认样式。阅读 generic.xaml,前景仅由 VisualStateManager 管理,因此样式中的画笔集将被覆盖。我认为Faywang对UWP的解释在 UWP 中无法设置复选框内容颜色 也适用于 WinUI。 也就是说,如果你不介意修复Brush,最简单的解决办法就是在Style中定义一个ContentTemplate,直接设置TextBlock的Foreground。 <Style TargetType="CheckBox"> ... <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <TextBlock Foreground="Blue" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"/> </DataTemplate> </Setter.Value> </Setter> </Style>
选择项目时更改 ListView 的 DataTemplate 内 TextBlock 的前景色
我正在使用 C#/XAML 构建 Windows 应用商店应用程序。 我有一个绑定到 ItemsSource 的简单 ListView。有一个 DataTemplate,它定义了每个项目的结构,并且有一个 ContentControl 和一个
如何使用C++导航到WinUI3中NavigationView中的页面
我正在使用 C++ 在 WinUI3 中进行非常简单的 NavigationView 演示。 非常不幸的是,没有可用的材料或教程。 我正在使用 C++ 在 WinUI3 中制作非常简单的 NavigationView 演示。 非常不幸的是,没有可用的材料或教程。 <Window x:Class="App1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App1" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <NavigationView x:Name="NavView" IsTitleBarAutoPaddingEnabled="False" IsTabStop="False" IsBackButtonVisible="Collapsed" PaneDisplayMode="Left"> <NavigationView.MenuItems> <NavigationViewItem Icon="Page2" Content="Tab1" Tag="Tab1" IsSelected="True"/> <NavigationViewItem Icon="Page2" Content="Tab2" Tag="Tab2"/> </NavigationView.MenuItems> <ScrollViewer> <Frame x:Name="ContentFrame" Padding="12,0,12,24" IsTabStop="True"/> </ScrollViewer> </NavigationView> </Window> 如何使用 C++ 导航到 NavigationView 上的页面? ContentFrame().Navigate(**WHAT CODE GOES HERE**); 我已经知道如何使用 C# 来做到这一点。而且我没有将 UWP 与 c++/winrt 一起使用。 我需要使用 c++ 的 WinUI3 解决方案 查看MSDN上NavigationView的文档中的C++/WinRT示例代码(您可以在页面内搜索void MainPage::NavView_Navigate快速找到)。 总结如下: Windows::UI::Xaml::Interop::TypeName pageTypeName = winrt::xaml_typename<NavigationViewCppWinRT::SettingsPage>(); ContentFrame().Navigate(pageTypeName, nullptr, transitionInfo); // transitionInfo is passed to your event handler // if you do this without a transition info, simply // omit the last argument. 这应该是一条评论,由于声誉较低,我无法发表评论。 但是任何寻求答案的人, windowsAPPSDK 存储库中有一个 C++ 导航的示例工作示例 https://github.com/microsoft/WindowsAppSDK-Samples/blob/main/Samples/Windowing/cpp-winui/SampleApp/MainWindow.xaml.cpp
当 C++ winrt 页面类与 XAML 页面一起使用时,不是成员错误
我正在构建一个简单的 ActionTracker 程序。我有一个非常简单的 XAML 文件: //XAML文件 我正在构建一个简单的 ActionTracker 程序。我有一个非常简单的 XAML 文件: //XAML 文件 <Page x:Class="ActionTracker_V3.ActionDetails" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ActionTracker_V3" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid> <TextBox Text="{x:Bind temp, Mode=OneWay}"></TextBox> </Grid> </Page> 支持运行时类定义为: //IDL 文件 namespace ActionTracker_V3 { runtimeclass ActionDetails : Windows.UI.Xaml.Controls.Page { ActionDetails(); String temp; } } 关联的*.h文件和*.cpp文件如下所示: #include "ActionDetails.g.h" namespace winrt::ActionTracker_V3::implementation { struct ActionDetails : ActionDetailsT<ActionDetails> { ActionDetails(); hstring temp(); void temp(hstring const& value); }; } namespace winrt::ActionTracker_V3::factory_implementation { struct ActionDetails : ActionDetailsT<ActionDetails, implementation::ActionDetails> {}; } *.cpp 文件是: #include "pch.h" #include "ActionDetails.h" namespace winrt::ActionTracker_V3::implementation { ActionDetails::ActionDetails() { InitializeComponent(); } hstring ActionDetails::temp() { throw hresult_not_implemented(); } void ActionDetails::temp(hstring const& value) { throw hresult_not_implemented(); } } 但是,当我编译这些文件时,出现以下错误: Error C2039 'ActionDetails': is not a member of 'winrt::ActionTracker_V3::implementation' ActionTracker_V3 c:\users\kurian.kattukaren\source\repos\actiontracker_v3\actiontracker_v3\generated files\xamltypeinfo.g.cpp 我不知道是什么原因导致了这个错误。我在类声明中找不到任何错误。有人可以指出我错在哪里吗? 根据对 C++/WinRT 问题进行故障排除中列出的故障排除步骤(稍微重新格式化): C++ 编译器产生错误“'implements_type':不是 '' 的任何直接或间接基类的成员”。 当您使用实现类型的名称空间非限定名称(例如,MyRuntimeClass)调用 make,并且尚未包含该类型的标头时,可能会发生这种情况。编译器将 MyRuntimeClass 解释为投影类型。 解决方案是包含您的实现类型的标头(例如,MyRuntimeClass.h)。 我复制上述信息只是想说,您的问题可能是由于编译器无法从您的项目中找到正确的标头。但这并不意味着您的代码有任何问题。有可能某些设置不正确,或者只是 Visual Studio 的问题。没有你的项目我也无法确定。如果这种情况在您的环境中总是发生,并且您确定您的代码是正确的,请直接从 Visual Studio->关于->向开发者社区论坛发送反馈来报告。 无论如何,任何时候如果你的项目出现奇怪的错误,你都可以先尝试一个新项目作为测试。
如何使用C++访问WriteableBitmap.PixelBuffer像素?
MSDN 上有很多 C# 的示例,但只有一些 C++ 的代码片段。我已经把它放在一起,我认为它会起作用,但我不确定我是否要释放所有必须的 COM 引用。
我尝试了 InkScape 和 XPS 方法,但它没有给我正确的 XAML。 谁能将此 SVG 转换为 WinRT 兼容的 XAML 吗?
UWP C++WinRT 如何禁用 GridView 中的单个项目
我有一个 ,ItemsSource 绑定到 IObservableVector。我只想禁用此 GridView 中的几个项目。我怎样才能做到这一点?我看到其他类似的问题...
我在 xaml 中有一个页面布局,其中包含一个带有多个网格视图的网格,这些网格视图代表不同的内容和各个样式。 这是我的应用程序的中心,它展示了这些不同的概念......
如何在Hololens上获得XAML UWP二维窗口的3D姿势。
有没有办法在Hololens上获得XAML UWP 2D窗口的3D姿势?我搜索了Windows.Perception命名空间,但没有任何结论。很容易检索到用户头部的位置,并且 ...
CredUIPromptForWindowsCredentials引发Microsoft C ++未处理的异常:后台线程中的winrt :: hresult_error
通过CredUIPromptForWindowsCredentials API提示用户凭据的最简单的C ++代码会在后台线程中引发与XAML处理相关的未处理异常。代码示例:CString me(_T(“ ...
我正在将应用程序从WinRT移植到UWP。 (我已经将其移植到iOS和Android)我的应用有多个页面。我需要能够确定当前正在查看哪个页面,然后更新...
在Win32程序中使用XAML Hosting API导航到页面会导致访问冲突
我正在使用XAML托管API在Win32程序中托管XAML内容。我已经成功初始化了托管框架并创建了DesktopWindowXamlSource对象。我已经将Content()设置为...
我正在UWP Web视图中导航到一个URL,该页面在内部进行了许多http调用。我正在通过WebResourceRequested事件拦截这些调用。我在标头中添加身份验证令牌,这样做是...
是否有可能实现一个Windows Store / Metro应用,该应用代表MDI(多文档界面)样式的应用?如果可以,我可以采取哪些可行的方法?我是新来的...
我正在尝试做一个c ++ / winrt项目,以学习更多有关c ++和Windows开发的知识。我使用的c ++ / winrt版本是2.0.200117.5,我有以下我想要的类.. 。