xaml 相关问题

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

WINUI 3 将字体应用于所有控件

我想更改 WinUI 3 应用程序中的字体。到处都是。我在这里找到了一些答案,但它们似乎都将字体应用于目标,如 TextBlock、Button 等。我即将设计的应用程序......

回答 2 投票 0

带有绑定文本的 WPF 文本块不会滚动

我的 TextBlock 中的文本绑定到我的代码中的元素。但是,当我第一次打开窗口时,文本块完全是空的。当我添加文本时,我需要 ScrollViewer 来允许我滚动...

回答 2 投票 0

无法解析资源

我在 WPF 中使用 MaterialDesign for XAML 包。当我运行我的应用程序时,所有样式和控件都会按预期呈现。然而,在 XAML 设计器中,我有很多错误,例如“The

回答 3 投票 0

WinUI3 列表查看所选项目

我正在使用像这样的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 包,但我希望这能让您了解如何解决问题。

回答 1 投票 0

滚动条和...文本框的奇怪问题? (垂直内容对齐)

我有这个奇怪的问题,我不明白是什么原因造成的。在我的整个项目中,文本框无法垂直居中,无论我使用什么,padding,VerticalContentAlign...

回答 1 投票 0

如何将图片标题放在NavigationView的顶部?

如何在 Microsoft.UI.Xaml.Controls(UWP 应用程序)中的 NavigationView 顶部制作标题? 我设法使用 PaneHeader 属性制作标题,但我希望将图形放在 m 上方...

回答 1 投票 0

.NET MAUI Switch 颜色变化不持久

我想在.NET MAUI应用程序中实现一个开关。然而,我还想调整颜色。 不幸的是,这些变化首先出现: 现在,关闭开关: 再次,转动开关...

回答 1 投票 0

控件模板中的 WPF XAML 菜单绑定

我有一个自定义菜单,其中的 ItemsSource 绑定到我的视图模型中的 ObservableCollection。为了自定义菜单,我在样式中使用 ControlTemplate,并且 ControlTemplate 包含一个实验室...

回答 1 投票 0

dataGrid 中的嵌套列表绑定

我正在寻找一种解决方案,将嵌套列表绑定到 DataGrid 以将它们显示在单独的列中。 视图模型 公共类ParametersDataGridViewModel:ViewModelBase { 公共可观察集合<...

回答 1 投票 0

带有 Xamarin Forms 中 XAML 元素参数的构造函数

是否可以使用依赖注入服务使用参数化构造函数创建 XAML 元素?或者还有其他方法来传递依赖关系吗?我想要有一些depe的行为...

回答 2 投票 0

为什么我的集合视图不占据框架的整个宽度。 .net 毛伊岛

我一直在尝试为我玩的纸牌游戏制作一个简单的计分应用程序。我只是想了解基本结构。所以我创建了一个带有集合视图的框架,其中包含一些模拟数据来表示......

回答 1 投票 0

字体图标仅在 Windows 版本的 .Maui 应用程序上为空

在构建 .Maui 应用程序时,我们已经让 Windows 版本可以运行。然而,与 Android 和 IOS 版本不同的是,Windows 版本不会加载任何我们的 Fontawesome 图标。 它们不是空白方块...

回答 1 投票 0

默认上下文菜单仅更改颜色

我有这个问题,我为我的wpf窗口设置了样式,其中一部分用于默认ContextMenu,但仍然有部分默认样式。 我尝试为每种类型的控件设置背景...

回答 1 投票 0

“StaticResourceExtension”对于 Setter.Value 无效。 - 安装VS2022后出现新错误

我正在创建一个小WPF(自学)。 我相信它是在 VS2021 中创建的,但是我的电脑死了(主板)。 我已经在新电脑上重新安装了所有内容并带来了备份并...

回答 1 投票 0

使用.net maui,从列表创建CollectionView时,如何访问另一个列表以根据ID提取详细信息?

我对 xaml 和 .net maui 还很陌生,但我真的不知道该使用哪些搜索词。我想用集合视图在 xaml 中列出今天的任务通知。我想要这份清单,当

回答 1 投票 0

我的 try catch 错误消息没有显示

我正在制作一个计算器,它可以根据提供给程序的电压和电流计算电阻。当程序计算该值时,它应该记录日期时间、使用的电压、...

回答 1 投票 0

如何向 .NET Maui 应用程序中的所有按钮添加全局单击事件处理程序?

我有一个 .NET Maui 应用程序,应该将用户事件写入日志文件。我一直在做的是将这段代码放在每个基页或不继承该基页的页面中。 我学会了...

回答 1 投票 0

如何在 WPF XAML 中的转换器调用中执行绑定?

这个应该很简单,但是我找不到。 目前,我有以下触发器: 这个应该很简单,但是我找不到。 目前,我有以下触发器: <DataTrigger Binding="{Binding warmed, Converter={converters:IsGreaterThan 185}}" Value="False"> 如您所见,有一个与固定值(185)的比较,但我希望它是可变的,所以我尝试了这样的方法: <DataTrigger Binding="{Binding warmed, Converter={converters:IsGreaterThan "{Binding MaxMinutes}" } }" Value="False"> (出于可读性原因,我添加了一些空格。 虽然这应该非常简单,但我似乎没有找到。 有人有想法吗? 预先感谢 P.s.您很快就将此问题标记为重复问题,但重复的问题基于 ConverterParameter。 结果我尝试将自己的情况转换成一个情况,使用这样的ConverterParameter,但是没有成功: <DataTrigger Binding="{Binding warmed, Converter={converters:IsGreaterThan}, ConverterParameter=185}" Value="False"> => 这似乎不起作用。谁能告诉我如何使用 ConverterParameter 将我的情况转换为一种情况? 打开“创建数据绑定”对话框时,我看到的是: 如您所见,没有任何 185 值的痕迹,尽管它在我的解决方案中至关重要。当我将其填写为 ConverterParameter 时,这就是我得到的: <DataTrigger Binding="{Binding warmed, ConverterParameter=185, Converter={converters:IsGreaterThan 185}}" Value="False"> ...并且再次无法声明任何多重绑定(因为我无法通过尝试键入来完成它,所以我尝试使用 Visual Studio“属性”编辑器来获取它)。 编辑:新的一天,新的尝试 再次尝试,这次尝试介绍MultiBinding: <DataTrigger> <DataTrigger.Binding> <MultiBinding> <Binding Path="warmed"/> <Binding Converter="{converters:IsGreaterThan 185}"/> <Binding Value="False"/> </MultiBinding> </DataTrigger.Binding> => 它会产生两条错误消息: XLS0413:在“Binding”类型中找不到属性“Value”。 XDG0012:成员“Value”无法识别或无法访问。 再次感谢 注释是正确的,即不可能直接将 ConverterParameter 与使用纯 XAML 的变量一起使用。 XAML 就是这样不灵活。 虽然 MultiBinding 可以在这里工作,但我认为这是一种冒险的方法(稍后会详细介绍),而且肯定是矫枉过正。相反,我会简单地在视图模型级别处理这个问题,方法是定义一个 bool POCO 属性 WarmEnough,其值源自 Warmed 和 MaxMinutes: public class ViewModel : INotifyPropertyChanged { public bool WarmEnough => this.Warmed >= this.MaxMinutes; private double _warmed; public double Warmed { get { return _warmed; } set { if (_warmed == value) return; _warmed = value; OnPropertyChanged(); OnPropertyChanged(nameof(Warmed)); } } private double _MaxMinutes; public double MaxMinutes { get { return _MaxMinutes; } set { if (_MaxMinutes == value) return; _MaxMinutes = value; OnPropertyChanged(); OnPropertyChanged(nameof(Warmed)); } } public event PropertyChangedEventHandler? PropertyChanged; private void OnPropertyChanged([CallerMemberName] string? name = null) { this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } } 然后您只需将触发器绑定到 WarmEnough 属性,而不考虑转换器等。 (只要确保您不需要出于某种原因进行双向绑定即可!)这是有效的,因为每当 WarmEnough 或 Warmed 发生更改时,都会引发 MaxMinutes 的属性更改。因此,每当这些属性中的任何一个发生更改时,都会触发 Trigger。 从功能上来说,它与 MultiBinding 相同 - 在 Convert 的 IMultiValueConverter 方法中,你基本上会做我建议你在 WarmEnough 的 getter 中做的同样的事情 - 但问题是值将作为 object 数组进入多转换器,您需要检查和转换其类型,这取决于 XAML 中 Binding 的顺序。如果没有明确的文档,这很容易让未来的您和/或您的继任者陷入困境。 IMO MultiBinding确实最适合所有值都是相同类型并且正确顺序要么明显要么不相关的情况,例如对多个条件进行布尔 AND/OR/XOR 检查、将字符串连接在一起等。可以通过这种方式完成,所以也许克莱门斯会很友善地向我们展示。但我会坚持使用基于视图模型的方法并缩短所有这些。

回答 1 投票 0

将 MenuItem 图标颜色绑定到 MenuItem 的前景

问题 我有一个带有控制模板的 MenuItem,该模板可以更改 MenuItem 的前景,如下所示: 问题 我有一个带有控制模板的 MenuItem,可以更改 MenuItem 的 Foreground,如下所示: <ControlTemplate TargetType="MenuItem"> <StackPanel Background="{Binding Background}" Orientation="Horizontal"> <ContentPresenter Content="{TemplateBinding Icon}"/> <TextBlock Text="{TemplateBinding Header}"/> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Foreground" Value="Red"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> 我想将图标的颜色绑定到该前景色。在这种情况下,图标只是一个圆圈。我尝试了以下绑定: <MenuItem Header="Sub"> <MenuItem.Icon> <Ellipse Width="16" Height="16" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType=MenuItem}}"/> </MenuItem.Icon> </MenuItem> 但是,这会在应用程序启动时出现以下绑定错误,并且椭圆最终不会被渲染: System.Windows.Data 错误:4:找不到引用“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.MenuItem',AncestorLevel='1'' 进行绑定的源。 BindingExpression:Path=前景;数据项=空;目标元素是“椭圆”(名称=“”);目标属性是“填充”(类型“画笔”) 我还尝试在图标中放置一个虚拟元素,以传播前景并绑定到此: <MenuItem.Icon> <Grid> <TextBlock Name="foregroundCapture"/> <Ellipse Width="16" Height="16" Fill="{Binding Foreground, ElementName=foregroundCapture}"/> </Grid> </MenuItem.Icon> 但这给出了类似的错误: System.Windows.Data 错误:4:找不到引用“ElementName=foregroundCapture”的绑定源。 BindingExpression:Path=前景;数据项=空;目标元素是“椭圆”(名称=“”);目标属性是“填充”(类型“画笔”) 如何才能使绑定生效?仅供参考,图标最终将是资源字典中的一个对象。因此它将无法访问实际的菜单项。 替代解决方案 我可以想到几个替代解决方案。但实际上他们都不是很好: 创建具有 MouseOverIcon 属性的 MenuItem 子类并让触发器使用它。 为每个图标创建自定义控件,并传播 Foreground 属性。这将允许直接在控件内进行直接绑定。 完整示例 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication1" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <Style TargetType="MenuItem"> <Style.Triggers> <Trigger Property="Role" Value="SubmenuItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="MenuItem"> <StackPanel Background="{Binding Background}" Orientation="Horizontal"> <ContentPresenter Content="{TemplateBinding Icon}"/> <TextBlock Text="{TemplateBinding Header}"/> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter Property="Foreground" Value="Red"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </Window.Resources> <DockPanel> <Menu DockPanel.Dock="Top"> <MenuItem Header="Header"> <MenuItem Header="Sub"> <MenuItem.Icon> <Grid> <TextBlock Name="foregroundCapture"/> <Ellipse Width="16" Height="16" Fill="{Binding Foreground, ElementName=foregroundCapture}"/> </Grid> </MenuItem.Icon> </MenuItem> </MenuItem> </Menu> <Grid> </Grid> </DockPanel> </Window> 你可以尝试这样的绑定: <Ellipse Width="16" Height="16" Fill="{Binding RelativeSource={RelativeSource Mode=Self}, Path=(TextElement.Foreground)}"/>

回答 1 投票 0

从代码中关闭 Material Design DialogHost

我正在尝试找到一种方法来从代码启动活动 DialogHost 的关闭,但无法找到正确的语法。我认为主要的挑战是从类访问 DialogHost

回答 3 投票 0

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