xaml 相关问题

可扩展应用程序标记语言(XAML)是一种基于XML的声明式语言,用于在各种框架中初始化结构化值和对象。当问题是关于具有特定框架的XAML的使用时,还应该提供框架的标签,例如, [wpf](Windows Presentation Foundation),[silverlight],[windows-phone],[windows-store-apps](Windows 8商店应用),[win-universal-app],[xamarin.forms]或[工作流程 - 基础]

WinUI 3 - 如何在应用程序启动时导航到 NavigateViewItem?

我正在开发一个 WinUI 3 应用程序,我无法找到或理解的一件事是如何在应用程序启动时打开(NavigationViewItem,基本上是“主页”选项卡,主页)。我有阿普...

回答 1 投票 0

如何通过使用 x:name 或标签定位来更改 WinUI 3 中 NavigationViewItem 的 Content 和 IsSelected 属性?

我创建了一些NavigationViewItem并设置它的x:Name和Tag,例如: 我创建了一些NavigationViewItem并设置了它的x:Name和Tag,比如: <NavigationView x:Name="nvSample" SelectionChanged="nvSample_SelectionChanged" IsBackButtonVisible="Collapsed" IsSettingsVisible="False"> <NavigationView.MenuItems> <NavigationViewItem x:Name="NavigationViewItem_HomePage" Icon="Home" Content="Home" Tag="HomePage" IsSelected="True" /> <NavigationViewItem x:Name="NavigationViewItem_SimpleSortPage" Icon="Sort" Content="Sort" Tag="SimpleSortPage" /> <...........> </NavigationView.MenuItems> </NavigationView> 我想通过 NavigationViewItem 或 x:Name 找到 Tag 对象,以便我可以通过代码更改 Content 和 IsSelected 属性。 我发现Type.GetType可能会通过x:Name获得页面,例如: Type pageSelected = Type.GetType("NumberSort.Pages.SimpleSort"); RootPageFrame.Navigate(pageSelected,this); 所以我尝试用它来获取 NavigationViewItem 对象,例如: var NavigationItem = (NavigationViewItem)Type.GetType("NavigationViewItem_HomePage"); 但是,它不起作用。 您可以创建如下扩展方法: NavigationViewExtensions.cs public static class NavigationViewExtensions { // Get all NavigationViewItems from a NavigationViewItem. public static IEnumerable<NavigationViewItem> GetAllNavigationViewItems(this NavigationViewItem navigationViewItem) { if (navigationViewItem.MenuItems is null) { yield break; } foreach (var menuItem in navigationViewItem.MenuItems.OfType<NavigationViewItem>()) { yield return menuItem; if (menuItem.MenuItems is null) { continue; } foreach (NavigationViewItem subMenuItem in menuItem.MenuItems.OfType<NavigationViewItem>()) { yield return subMenuItem; } } } // Get all NavigationViewItems from a NavigationView. public static IEnumerable<NavigationViewItem> GetAllNavigationViewItems(this NavigationView navigationView) { foreach (NavigationViewItem menuItem in navigationView.MenuItems.OfType<NavigationViewItem>()) { yield return menuItem; if (menuItem.MenuItems is null) { continue; } foreach (NavigationViewItem subMenuItem in menuItem.GetAllNavigationViewItems()) { yield return subMenuItem; } } } } 并像这样使用它: if (this.nvSample .GetAllNavigationViewItems() .FirstOrDefault(x => x.Name is "NavigationViewItem_HomePage") is NavigationViewItem navigationViewItem) { // Do something here. } 我找到了一个简单的方法来做到这一点: public static void SwitchPage (string pageName,NavigationView navigationView) { var navigationViewItems = navigationView.MenuItems.OfType<NavigationViewItem>().ToList(); if (navigationViewItems != null) { foreach (var item in navigationViewItems) { if( item.Tag.Equals(pageName)) { item.IsSelected = true; break; } } } else {throw new ArgumentNullException()}; } 在此示例中,它将 IsSelected 的 NavigationViewItem 属性设置为 true,其中 pageName 等于 Tag NavigationViewItem的属性。

回答 2 投票 0

如何在 WinUI Template Studio 中的“设置”旁边添加新页面

我想在导航窗格的底部有几个页面,但我在代码中找不到添加“设置”导航的位置。你有什么建议吗? 有一个关于 NavigationView 的文档 哈...

回答 1 投票 0

使用自定义图标模仿禁用的 fonticon 行为

当带有 FontIcon 的按钮被禁用时,它将自动变灰。然而,如果按钮上有自定义图标,这种情况当然不会发生。模仿这个的最佳方法是什么

回答 1 投票 0

Xamly 确定 ListBox.Items.Count > 0

XAML中有没有办法判断ListBox是否有数据? 如果没有数据,我想将其 IsVisibile 属性设置为 false。

回答 4 投票 0

展开所有方法可展开除第一个记录之外的所有记录

我添加了这个按钮来展开所有记录: 我添加了这个按钮来展开所有记录: <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="right"> <StackPanel.Style> <Style TargetType="StackPanel"> <Setter Property="Visibility" Value="Visible"/> <Style.Triggers> <DataTrigger Binding="{Binding ActiveTreeNode}" Value="{x:Null}"> <Setter Property="Visibility" Value="Collapsed"/> </DataTrigger> <DataTrigger Binding="{Binding ActiveTreeNode}"> <Setter Property="Visibility" Value="Visible"/> </DataTrigger> </Style.Triggers> </Style> </StackPanel.Style> <Button Content="Expand All" Click="ExpandAllRateParts_Click"/> </StackPanel> 在 xaml.cs 中: private void ExpandAllRateParts_Click(object sender, RoutedEventArgs e) { var ratesGrid = RatesGrid; ratesGrid.UpdateLayout(); ratesGrid.Records.ExpandAll(true); } 我遇到的问题是,第一次单击时,它将展开除第一个记录之外的所有记录。当我再次单击它时,第一个将展开。我只是不确定为什么会发生这种情况或者我应该检查什么? 这里的问题与这部分根本无关: private void ExpandAllRateParts_Click(object sender, RoutedEventArgs e) { var ratesGrid = RatesGrid; ratesGrid.UpdateLayout(); ratesGrid.Records.ExpandAll(true); } 它确实有效,甚至可以简化为: private void ExpandAllRateParts_Click(object sender, System.Windows.RoutedEventArgs e) { RatesGrid.Records.ExpandAll(true); } 发生此问题的原因是视图模型中的一个方法被错误地调用了两次,这导致网格刷新,这就是发生这种奇怪行为的原因

回答 1 投票 0

将列表<object>绑定到Datagrid WPF,C#

我对 WPF 完全陌生,所以这是我的代码: 我对 WPF 完全陌生,所以这是我的代码: <DataGrid x:Name="dgVarConfig" ItemsSource="{Binding varConfigList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="10,59,0,0" VerticalAlignment="Top" Height="403" Width="1278" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" HeadersVisibility="Column"> <DataGrid.Columns> <DataGridTextColumn Width="auto" Header="Match Ausdruck" Binding="{Binding match_expression}"></DataGridTextColumn> </DataGrid.Columns> </DataGrid> 我的文件:MainWindow.xaml、MainController.cs、VarConfigDAO.cs varConfigDAO.cs 将列表返回到 MainController,MainController.cs 将其返回到 MainWindows.xaml。 这是 VarConfig.cs: public class VarConfig { public int id { get; set; } public String group { get; set; } public String machine { get; set; } public String match_expression { get; set; } public String variant_new_1 { get; set; } public String calc_formula_1 { get; set; } public String variant_new_2 { get; set; } public String calc_formula_2 { get; set; } } 如果我以编程方式设置项目源,它就可以工作: dgVarConfig.Itemssource = mainController.loadVarConfigList(); 但这不是我想要的,因为我想通过网格更新列表(插入、删除、更新行=> Mode=TwoWay) 我知道如何通过 xaml 填充 itemssource 吗? 创建一个视图模型类,其属性包含一组 VarConfig 对象。集合应该通知视图有关更改(例如添加或删除的元素)。因此,合适的集合类型是 ObservableCollection: public class ViewModel { public ObservableCollection<VarConfig> VarConfigList { get; } = new ObservableCollection<VarConfig>(); } 将 UI(例如 MainWindow)的 DataContext 设置为视图模型的实例,例如在 MainWindow 构造函数后面的代码中,如下所示: public MainWindow() { InitializeComponent(); var viewModel = new ViewModel(); // fill viewModel.VarConfigList DataContext = viewModel; } 绑定到 XAML 中的 VarConfigList 属性。无需设置 Mode=TwoWay 或 UpdateSourceTrigger=PropertyChanged,因为 ItemsSource 属性仅单向绑定(DataGrid - 或任何其他 ItemsControl - 从不设置它): <DataGrid ItemsSource="{Binding VarConfigList}" ...> ... </DataGrid> 最后,如果您还希望 UI 对各个 VarConfig 属性的更改做出反应,则应该实现 INotifyPropertyChanged 接口: public class VarConfig : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } private int id; public int Id { get { return id; } set { id = value; OnPropertyChanged("Id"); } } // similar code for the other properties } 注意外壳。人们广泛接受在 PascalCase 中书写 C# 属性名称。 您必须将 DataContext 的 DataGrid 设置为其中包含 varConfigList 的任何对象。然后,DataGrid 将能够看到 varConfigList 并执行其操作。你没有给出很多代码,所以我看不到你在做什么,但我会做一些猜测,看看它们是否有帮助。 有几种方法可以做到这一点。我认为 DataGrid 在你的 MainWindow 中,所以它通常会从那里继承它的 DataContext;但您也可以单独设置。 这是一种可能的方法: 主窗口 <Window ...> <DataGrid ... ItemsSource={Binding VarConfigList} ... /> </Window> public partial class MainWindow : Window { ... MainWindow() { InitializeComponent(); this.DataContext = new MainController(); } } 主控制器 class MainControler { private var _varConfigList; public var VarConfgList { get { return _varConfigList; } } ... public MainControler() { // set stuff up } } 那么你的下一个问题是如何让DataGrid按照你想要的方式对待VarConfigList,但那是另一个故事了。 以我有限的经验,整理DataContext一直是学习WPF的最大障碍。

回答 2 投票 0

WPF:将 ContextMenu 绑定到 MVVM 命令

假设我有一个带有返回命令的属性的窗口(事实上,它是一个在 ViewModel 类中带有命令的 UserControl,但让我们尽可能简单地重现问题)...

回答 7 投票 0

如何使用 Prism 在 WPF 应用程序中(最好)在选项卡中实现范围服务?

我正在使用 Prism 框架创建 WPF 应用程序,并且遇到了依赖项注入范围的问题。我的应用程序包含多个选项卡(至少现在有 2 个),每个选项卡都有相同的

回答 1 投票 0

在毛伊岛实施日历

我想在.NET MAUI中实现日历控件,这样 首先必须有一个占位符表示用户选择日期 当用户点击它时,会出现日历 当用户选择日期时

回答 1 投票 0

有没有办法在特定秒数后自动关闭弹出窗口?

我目前正在 .NET 8.0 中编写一个 maui 应用程序,在方法完成后,我通常会显示一条消息,宣布该过程已成功完成,我使用 DisplayAlert() 来执行此操作

回答 1 投票 0

.NET MAUI QueryProperty:数据未传递到另一个页面

我正在使用 .NET MAUI 和 Firestore 开发绘图应用程序。在主页上,我显示了现有绘图的列表。当我选择一个时,我想导航到 DrawPage 并打开所选的

回答 1 投票 0

如何使用 .NET MAUI 使用 Mvvm 模式通过 x:Name 获取组件?

我是 .NET MAUI 的新手,我的问题非常简单,但我找不到解决此问题的方法,我试图使用 Mvvm 模式通过其 x:Name 获取任何组件。 通过 ViewModel 可以吗? ...

回答 2 投票 0

如何在WinUI3中创建一个比父控件更大的控件

我想创建一个可以展开的控件,即使大小比其父控件大也能够显示。我需要一个文本框来输入一些内容并展开控件...

回答 1 投票 0

如何使用MSBuild和XSLT实现条件XAML编译?

在这个问题之后,我想根据预处理器指令在构建时有条件地包含/排除 XAML 元素,类似于 #if/#else 在 C# 中的工作方式。我尝试过使用 XSLT 来转换...

回答 1 投票 0

在生成的模板中使用附加属性会导致 XamlParseException

我在动态模板中使用附加属性时遇到问题。 我正在编写一个自定义控件。该控件应该显示某个集合中的项目,我想启用该使用...

回答 1 投票 0

如何使用 XSLT 在构建时有条件地转换 XAML 以镜像 C# 预处理器指令?

我在开发时广泛使用 C# 预处理器指令。我直接在 .cs 文件中定义它们,或者在 .csproj 中全局定义它们: fix_issue_001;

回答 1 投票 0

DataBinding 未在 WPF 窗口中显示我的有界数据源

我对 XAML、WPF、MVVM 等概念很陌生。首先,也许对我糟糕的英语技能感到抱歉:P 我的任务是创建一个需要用户输入的应用程序。我的主窗口是一个用户...

回答 1 投票 0

在从 URL 下载的框架中使用页面

我有带有 Frame 对象的 WPF 窗口,我想在其中加载通过 http 请求收到的 xaml 代码。 (请求响应是带有 xaml 代码或文件的 URL)。我如何初始化此页面或加载到框架中

回答 1 投票 0

如何在代码隐藏中添加转换器

如何以编程方式在后面的代码中使用显示成员路径上的转换器或将项目模板与转换器一起使用? var listView = 新的ListView { ItemsSource = SomeObject,...

回答 1 投票 0

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