xaml 相关问题

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

在 MAUI 中将多个枚举值传递给转换器参数的 XAML 语法是什么?

我能够提供一个枚举值作为 ConverterParameter,如下所示: Text="{Binding TextValue, Converter={mct:TextConverter}, ConverterParameter={x:Static local:MyEnum.Value1}}" 或者几个

回答 1 投票 0

WPF 应用程序在使用 SingleBorderWindow 和 WindowChrome 时超出全屏显示器宽度

我想创建一个带有自定义工具栏/控制按钮的 WPF 应用程序。大多数来源指示您使用 WindowStyle.None 并使用 WindowChrome。这确实删除了默认的 Windows 工具栏,并且它

回答 1 投票 0

WPF 动态向类添加属性并稍后通过 BindingExtension 检索它们

我希望能够在运行时向类添加属性,并稍后通过 BindingExtension 访问这些属性,例如: 类属性持有者{ 属性=[]; } 类 PropertiesAdde...

回答 1 投票 0

无法将值“IsVisible”转换为“Microsoft.Maui.Controls.BindableProperty”

创建 .NET MAUI SingleProject 应用程序时,我尝试实现一些 XAML 代码,但无法编译它并收到奇怪的构建错误。 这正是我所做的。在我的 XAML 文件中,我有这个...

回答 1 投票 0

捕获 WPF 运行时 BindingExpression 错误

我们都可以在 Visual Studio 输出窗口中看到运行时 BindingExpression 错误。但是我们可以在运行的应用程序本身中捕获这些事件吗?我听说 WPF 跟踪...这有什么作用吗...

回答 3 投票 0

具有不同字体大小的MAUI XAML标签

我需要一个标签来显示数千范围内的数字。我没有按照要求使用千位分隔符,但我希望用户能够专注于千位。例如,如果我要展示...

回答 1 投票 0

为什么我无法像在 XAML 上那样在代码后面绑定 StringFormat?

这是我的工作示例,它正确绑定了 ViewModel 并正确触发了 StringFormat 和 ValidateMaskDecimal: 这是我的工作示例,它正确绑定了 ViewModel 并正确触发 StringFormat 和 ValidateMaskDecimal: <ListBox x:Name="Difetti" ItemsSource="{Binding Difetti}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBox x:Name="Metro" controls:TextBoxHelper.Watermark="Metro" PreviewTextInput="ValidateMaskDecimal"> <TextBox.Text> <Binding Path="Metro" StringFormat="{}{0:0.0##########}"> </Binding> </TextBox.Text> </TextBox> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> 现在,如果我尝试在后面的代码中执行类似的操作(删除 ListBox,并将唯一的 TextBox 绑定到某个特定 index = 0 处的数据模型): <TextBox x:Name="Metro" controls:TextBoxHelper.Watermark="Metro" PreviewTextInput="ValidateMaskDecimal" /> var data = DataContext as ViewModelData; if (data != null && data.Difetti.Count > 0) { int difettoIndex = 0; Metro.SetBinding(TextBox.TextProperty, new Binding { Source = data, Path = new PropertyPath($"Difetti[{difettoIndex}].Metro"), StringFormat = "{}{0:0.0##########}" }); } 它会抛出 ValueStringBuilder 的 ThrowFormatError 异常: System.FormatException: '输入字符串的格式不正确。'. 我不明白为什么。 我哪里错了?代码不应该给我同样的结果吗? DataModel 上的 Metro 以这种方式配置(可空 decimal): private decimal? metro; public decimal? Metro { get { return metro; } set { SetField(ref metro, value, "Metro"); } } 字符串格式前缀的 {} 特定于 XAML。您在代码中不需要它。 当然,您可以检查在XAML中创建的字符串格式文本。 BindingExpression expression = BindingOperations.GetBindingExpression(Metro, TextBox.TextProperty); string format = expression.ParentBinding.StringFormat; Debug.WriteLine(format);

回答 1 投票 0

WPF DataGrid 文本被截断

我的 WPF 4.5 应用程序有一个小(但烦人)的视觉错误,其中 DataGrid 的单元格在加载时被切断: 屏幕截图的 Dropbox 链接 但是一旦你调整窗口大小(点击正方形但是......

回答 2 投票 0

在以下来自 .Net Maui XAML 2009 的示例中,为什么relativeSource无法获取Picker?

苹果 橙色 <Picker> <Picker.ItemsSource> <c:List x:TypeArguments="x:String"> <x:String>apple</x:String> <x:String>orange</x:String> </c:List> </Picker.ItemsSource> <Picker.SelectedItem> <Binding> <Binding.Converter> <local:SampleConverter SampleBindable="{Binding ItemsSource, Source={RelativeSource FindAncestor, AncestorType={x:Type Picker}}}" /> </Binding.Converter> </Binding> </Picker.SelectedItem> </Picker> 我的理解是,我可以通过在FindAncestor的AncestorType中指定“Picker”来获取Picker控件,但事实似乎并非如此。 谁能解释一下为什么吗? 如果我给Picker起个名字,并将RelativeSource改为x:Reference,如下所示,我就可以成功获取它(“SampleBindable”属性反映了Picker的ItemsSource的内容)。 <Picker x:Name="pick"> <local:SampleConverter SampleBindable="{Binding ItemsSource, Source={x:Reference pick}}" /> 但是,每次只为这些绑定命名控件似乎有些多余...... 有谁知道有一种方法可以避免命名 Picker 控件吗? Source通常用于静态寻址位于其他地方的源。如果你想爬树寻找亲戚,你可以使用RelativeSource来代替。试试这个: <local:SampleConverter SampleBindable="{Binding ItemsSource, RelativeSource={RelativeSource AncestorType={x:Type Picker}}}" /> 根据您的代码,您没有绑定到祖先。官方文件说: FindAncestor 和 FindAncestorBindingContext 相对绑定模式用于绑定到可视树中某种类型的父元素 选择器不是父元素。我在 xaml 中似乎只有一个选择器。它似乎与自我绑定。所以你可以尝试: <local:SampleConverter SampleBindable="{Binding Source={RelativeSource Self}, Path=ItemsSource /> 我知道我迟到了,你可能已经解决了这个问题,但我也遇到了同样的问题,在网上找不到任何东西,而且 MAUI 文档非常缺乏。 您处于正确的路径上,只需删除 FindAncestor,指定路径是可选的,但我总是这样做以提高可读性: {Binding Path=ItemsSource, Source={RelativeSource AncestorType={x:Type Picker}}}

回答 3 投票 0

将 Microsoft 的拼写检查 Bing API 与 WPF 结合使用,返回零拼写错误

我正在尝试将 Microsoft 的 Bing Spellcheck API 与 WPF 应用程序一起使用。我有一个文本框,可以在其中输入一些文本,然后有一个按钮可以检查文本框中的拼写,并且应该重新...

回答 1 投票 0

从代码隐藏中调用命令

所以我一直在四处寻找,但找不到确切的方法。我正在使用 MVVM 创建用户控件,并希望在“Loaded”事件上运行命令。我意识到这需要我...

回答 7 投票 0

按下按钮将从另一个 XAML 页面创建文本标签;使用 .NET MAUI

我找不到解决方案,当您按 Home.xaml 文件上的“加号”按钮时, 它将创建一个带有 2 个文本标签的 StackLayout(与名为“Texts1”的 StackLayout 相同)

回答 1 投票 0

如何从视图模型类设置代码隐藏属性?

我从我的内容页面调用视图模型类中的方法,如下所示: 命令=“{绑定GetDbsCommand}” 通过这个方法,我希望它在我的代码隐藏中设置一个属性...

回答 1 投票 0

模板选择操作

我有一些模板并在CollectionView中使用他。 在 MAUI 中,使用 VisualState 可以轻松更改根元素属性,例如背景颜色。对于模板中的子元素来说很麻烦,你...

回答 1 投票 0

在 C# Wpf 应用程序中,如何动态更改用户控件中的按钮图标

所以在我的应用程序中我有一个用户控件。除其他外,它还有一个带有定义为几何数据的图像的按钮: 所以在我的应用程序中我有一个用户控件。除其他外,它还有一个按钮,其中的图像定义为几何数据: <!-- Add new Item Button --> <Button x:Name="createButton" Width="40" Height="40" Margin="0,0,20,0" HorizontalAlignment="Right" VerticalAlignment="Center" Command="{Binding OpenNewWindowCommand}" Style="{StaticResource RoundAccentButton}"> <!-- Icon --> <Viewbox x:Name="createViewbox" Width="22" Height="22"> <Path Data="{StaticResource NewTaskIcon}" Fill="{StaticResource OnAccent}" /> </Viewbox> </Button> ..放置在 ResourceDictionary 中的几何数据如下所示: <!-- New Task Icon --> <PathGeometry x:Key="NewTaskIcon" Figures="M17 21.2188V17.4688H13.25V14.9688H17V11.2188H19.5V14.9688H23.25V17.4688H19.5V21.2188H17ZM0.75 17.5V15H3.25V17.5H0.75ZM5.75 17.5V15H10.8438C10.7812 15.4375 10.7552 15.8542 10.7656 16.25C10.776 16.6458 10.8125 17.0625 10.875 17.5H5.75ZM0.75 12.5V10H3.25V12.5H0.75ZM5.75 12.5V10H14.0625C13.5833 10.3333 13.151 10.7083 12.7656 11.125C12.3802 11.5417 12.0417 12 11.75 12.5H5.75ZM0.75 7.5V5H3.25V7.5H0.75ZM5.75 7.5V5H20.75V7.5H5.75ZM0.75 2.5V0H3.25V2.5H0.75ZM5.75 2.5V0H20.75V2.5H5.75Z" /> 问题是我当然不想将 PathData 设置为用户控件中的硬编码值,而是将其设置在使用用户控件的位置。例如,我在另一个名为 TaskView.xaml 的视图中使用这个名为 SearchItems 的用户控件,如下所示: <UserControl x:Class="myTaskManager.UI.Wpf.MVVM.Views.TaskView" 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:uc="clr-namespace:myTaskManager.UI.Wpf.MVVM.UserControls" xmlns:vm="clr-namespace:myTaskManager.UI.Wpf.MVVM.ViewModels" d:DesignHeight="450" d:DesignWidth="435" mc:Ignorable="d"> <UserControl.DataContext> <vm:TaskViewViewModel /> </UserControl.DataContext> <DockPanel> <Border Width="435" Background="{StaticResource TaskListBackground}"> <uc:SearchItems /> </Border> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*" /> <ColumnDefinition Width="140" /> </Grid.ColumnDefinitions> <!-- Task Viewer --> <Grid Grid.Column="0"> <Grid.RowDefinitions> 。 。 . 我想做的是使用 PathData 访问 Viewbox 以根据用户控件的使用位置更改图标。我想我可以通过定义一个 DependencyProperty 来做到这一点,假设我们将其称为 PathData,然后将其设置在我使用用户控件的视图中,即类似这样的内容(下面是定义为用户控件的视图,它使用 SearchItems 用户控件) : <UserControl x:Class="myTaskManager.UI.Wpf.MVVM.Views.TaskView" 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:uc="clr-namespace:myTaskManager.UI.Wpf.MVVM.UserControls" xmlns:vm="clr-namespace:myTaskManager.UI.Wpf.MVVM.ViewModels" d:DesignHeight="450" d:DesignWidth="435" mc:Ignorable="d"> <UserControl.DataContext> <vm:TaskViewViewModel /> </UserControl.DataContext> <DockPanel> <Border Width="435" Background="{StaticResource TaskListBackground}"> <uc:SearchItems PathData="{StaticResource NewTaskIcon}" /> </Border> ..或者简单地在用户控件的代码隐藏中定义一个名为 PathData 的属性: public Geometry PathData { get; set; } 然后在用户控件的xaml代码中这样做: <!-- Add new Item Button --> <Button x:Name="createButton" Width="40" Height="40" Margin="0,0,20,0" HorizontalAlignment="Right" VerticalAlignment="Center" Command="{Binding OpenNewWindowCommand}" Style="{StaticResource RoundAccentButton}"> <!-- Icon --> <Viewbox x:Name="createViewbox" Width="22" Height="22"> <Path Data="{Binding PathData}" Fill="{StaticResource OnAccent}" /> </Viewbox> </Button> ..然后在使用用户控件的视图中只需使用与上面相同的语法,即: <UserControl x:Class="myTaskManager.UI.Wpf.MVVM.Views.TaskView" 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:uc="clr-namespace:myTaskManager.UI.Wpf.MVVM.UserControls" xmlns:vm="clr-namespace:myTaskManager.UI.Wpf.MVVM.ViewModels" d:DesignHeight="450" d:DesignWidth="435" mc:Ignorable="d"> <UserControl.DataContext> <vm:TaskViewViewModel /> </UserControl.DataContext> <DockPanel> <Border Width="435" Background="{StaticResource TaskListBackground}"> <uc:SearchItems PathData="{StaticResource NewTaskIcon}" /> </Border> ..我动态设置 PathData,但这些方法似乎都不起作用。实现这一目标的最佳方法是什么? 任何为我指明正确方向的答案将不胜感激。 谢谢, 彼得 UserControl 应公开一个 依赖属性 public static readonly DependencyProperty IconDataProperty = DependencyProperty.Register( nameof(IconData), typeof(Geometry), typeof(TaskView)); public Geometry IconData { get => (Geometry)GetValue(IconDataProperty); set => SetValue(IconDataProperty, value); } 通过 RelativeSource 绑定在控件的 XAML 中的 Path 元素中使用。请注意,不需要 Viewbox。 <Button Width="40" Height="40" ...> <Path Width="22" Height="22" Data="{Binding IconData, RelativeSource={RelativeSource AncestorType=UserControl}}" Fill="{StaticResource OnAccent}" Stretch="Uniform"/> </Button>

回答 1 投票 0

如何以编程方式更改 .NET Maui 应用程序中标签的 Text 属性?

我最初在 MainPage.xaml 文件中设置了一个标签,如下所示: 我最初在 MainPage.xaml 文件中设置了一个标签,如下所示: <Label x:Name="Ans" Text="" FontSize="18" FontFamily="Verdana" FontAttributes="Bold" TextColor="White" Grid.Column="1" Grid.Row="2" Padding="20,20,0,0"/> 我想要在运行时做的是更改 Text 属性以具有值。 我在我写的课程中尝试过这样的事情: string retVal; retVal = "This is a test"; Ans.Text = retVal; 但我收到一条消息: “当前上下文中不存在名称‘Ans’。” 我该如何解决这个问题? 您只能通过属于同一 XAML 页面/视图的代码隐藏中的 x:Name 来访问标签,在您的情况下,这将是 MainPage.xaml.cs,例如: public partial class MainPage : ContentPage { public void ChangeLabel() { Ans.Text = "This is a test"; } } 您无法通过其他类的 x:Name 属性访问视图元素。 XAML 文件与其隐藏代码属于同一类,这就是为什么隐藏代码类被标记为 partial。 更常见的方法是使用 MVVM 模式和数据绑定,而不是直接设置 Text 属性。 如果您需要根据不属于 View 或 ViewModel 的内容更新 UI,例如一个不同的、不相关的 View 或 ViewModel,那么您还可以使用 WeakReferenceMessenger 订阅消息并相应地更新 UI。 using Microsoft.Maui.Controls; // ... // Inside a method or event handler string retVal = "This is a test"; Label ansLabel = (Label)FindByName("Ans"); ansLabel.Text = retVal; 使用 FindByName 方法,您可以在当前 XAML 页面中查找指定的控件。 希望是你的帮助 也许你的标签在 CollectionView 中! 我之前也遇到过同样的问题,而且是“CollectionView”问题。 让我解释一下,不仅仅是一个标签,还有 CollectionView 中的任何元素,它的 x:name="whatever" 在代码隐藏中都不会被知道。知道您应该考虑也许其他类型的 UI 集合也对其在 Elements 内部具有相同的效果,idk。 我已经测试了所有这些,创建一个新的 ContentPage 并将其替换为此处的 xaml(不要忘记编辑命名空间)。 <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="someNamespace.TestPage" Title="TestPage"> <VerticalStackLayout> <CollectionView> <CollectionView.ItemTemplate> <DataTemplate> <Label x:Name="LabelInsideCollectionView" Text="Welcome to .NET MAUI!" VerticalOptions="Center" HorizontalOptions="Center" /> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> <Label x:Name="LabelOutsideCollectionView" Text="Welcome to .NET MAUI!" VerticalOptions="Center" HorizontalOptions="Center" /> </VerticalStackLayout> </ContentPage> 这是隐藏代码。 namespace someNamespace; public partial class TestPage : ContentPage { public TestPage() { InitializeComponent(); // This work. LabelOutsideCollectionView.Text = "Test"; // this will not work, Error CS0103 The name //'LabelInsideCollectionView' does not exist in the current context LabelInsideCollectionView.Text = "Test"; } } 您将看到您的代码隐藏可以读取“LabelOutsideCollectionView”,但不能读取“LabelInsideCollectionView”。 我希望它对您或其他人有所帮助,并希望 MAUI 团队能够解决所有这些问题。 这是截至本回答时我的计算机上已安装版本的列表。 Installed Workload Id Manifest Version Installation Source --------------------------------------------------------------------- android 33.0.68/7.0.100 VS 17.7.33906.173 maui-android 7.0.92/7.0.100 VS 17.7.33906.173 maui-windows 7.0.92/7.0.100 VS 17.7.33906.173 maui-maccatalyst 7.0.92/7.0.100 VS 17.7.33906.173 maccatalyst 16.4.7089/7.0.100 VS 17.7.33906.173 maui-ios 7.0.92/7.0.100 VS 17.7.33906.173 ios 16.4.7089/7.0.100 VS 17.7.33906.173 我刚刚向 Github 上的 .NET MAUI 存储库报告了一个问题。 https://github.com/dotnet/maui/issues/16182

回答 3 投票 0

MAUI Shell TitleView 在 iOS 中无法正常工作

我为我的 Shell 添加了一个 TitleView,它根据我的数据和图像显示页面的标题。 参考代码: 上面的代码在 Android 中可以完美运行,但在 iOS 中却不行。 问题...

回答 1 投票 0

在 Xamarin Forms / .NET MAUI 中使用带有按钮的 TouchEffect

我有包含多个项目的 CollectionView。 这些项目具有相同的数据模板,其中包含带有按钮的堆栈布局。 我有包含多个项目的 CollectionView。 这些项目具有相同的数据模板,其中包含带有按钮的堆栈布局。 <CollectionView ItemSizingStrategy="MeasureFirstItem" ItemsSource="{Binding SaveItems}" SelectionMode="None"> <CollectionView.ItemTemplate> <DataTemplate x:DataType="listItems:MyItemVM"> <StackLayout TouchEffect.Command="{Binding SelectedItemCommand}" TouchEffect.CommandParameter="{Binding .}"> <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> 当我按下按钮时,将调用 Stacklayout,因为它的视图层次结构较高。我该如何做到这一点,以便我按下按钮外部它会调用 StackLayout 命令,并且如果我按下按钮则会调用按钮命令? 我尝试了InputTransparent、CascadeInputTransparent、TouchEffect.ShouldMakeChildrenInputTransparent的多种设置。我原以为 InputTransparent = true 会导致两个命令都有效,但没有。当 InputTransparent = true 时,一个有效,另一个无效,反之亦然。 我曾考虑过使用 Skia 渲染器来检测触摸位置,或者在本机代码中拦截触摸事件,但我希望 XAML 有更简单的方法。 编辑:我设法使用以下数据模板检测这两个命令: <StackLayout> <Grid> <Grid TouchEffect.Command="{Binding SelectedItemCommand}" TouchEffect.CommandParameter="{Binding .}" /> <Grid> <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} /> </Gri> </Grid> </StackLayout> 因为网格内容可以叠加。它的性能不是很好,但它可以工作。 已解决:我设法使用以下数据模板检测这两个命令: <StackLayout> <Grid> <Grid TouchEffect.Command="{Binding SelectedItemCommand}" TouchEffect.CommandParameter="{Binding .}" /> <Grid> <Button Command={Binding OnCreateCommand} CommandParameter={Binding .} /> </Gri> </Grid> </StackLayout> 因为网格内容可以叠加。它的性能不是很好,但它可以工作。

回答 1 投票 0

如何在 C# 中处理到 Xaml 的动态绑定

我正在尝试通过从 viewmodel.cs 启动来动态更新我的 xaml 程序上的绑定 由于某种原因,我无法在我的 CS 中的 label.content 上显示绑定: 每次我跑步的时候,eit...

回答 1 投票 0

使用 WPF 以编程方式更改语言/资源

我有一个 DropDown(如果这很重要,请使用 MahApps),我想用它在我的程序中“动态”切换语言。 语言班 名称空间 SAM { 公开课语言 {

回答 2 投票 0

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