xaml 相关问题

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

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

我从我的内容页面调用视图模型类中的方法,如下所示: 命令=“{绑定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

WPF:基于列索引的绑定

在 WPF 中,如何基于 DataGrid 单元格的列索引创建数据触发器?我可以访问该列,但该列只有 DisplayIndex 可用,而不是真正的索引。我需要设计风格...

回答 2 投票 0

选择监视器以显示 WPF 应用程序

我正在开发 WPF 应用程序,我想选择显示窗口的监视器。我的.NET版本是8.0,SO是Windows,版本是7.0。 我正在尝试应用 Mostlytech 步骤,...

回答 1 投票 0

如何实现具有垂直组和水平项目的 .Net Maui CollectionView 布局

我正在尝试在应用程序中实现某种外观,以分类方式显示项目。 据我所知,CollectionView 允许我们准确地做到这一点,并且我已经成功了......

回答 1 投票 0

WinUI 3 RadioButton System.Runtime.InteropServices.COMException

我有一个 WinUI 3 应用程序。有一个扩展 ContentDialog 的简单自定义对话框。 对话框的 XAML 我有一个 WinUI 3 应用程序。有一个扩展 ContentDialog 的简单自定义对话框。 对话框的 XAML <StackPanel Grid.Column="0" Orientation="Vertical"> <RadioButton x:Name="GeneralTabButton" Content="{common:LocalizedUIString Uid=SettingsTab.General}" GroupName="GROUP_Setting" Command="{x:Bind VM.SelectGeneralSettingsCommand}" Style="{StaticResource SettingsRadioButton}"> </RadioButton> <RadioButton x:Name="SettingsTabButton" Content="{common:LocalizedUIString Uid=SettingsTab.Database}" GroupName="GROUP_Setting" Command="{x:Bind VM.SelectDatabaseSettingsCommand}" Style="{StaticResource SettingsRadioButton}"> </RadioButton> </StackPanel> 当我想在显示对话框时设置某些单选按钮的 IsChecked 状态时出现问题。有时它最终会出现 System.Runtime.InteropServices.COMException 且没有任何附加信息。看起来很随意。有时它会在第二次放映时崩溃,有时在第十次放映时崩溃。它在第一次放映时永远不会崩溃。 我尝试直接从 XAML 设置状态,我尝试在 Loaded 方法中设置状态(甚至通过 DispatcherQueue)。每次都会调用对话框的卸载事件。我正在使用 WindowsAppSDK 1.2.221209.1。单选按钮的风格几乎就是微软风格,单选按钮状态有不同的颜色。 至少有什么方法可以查明这个问题的根源吗? 编辑: 我有x64打包的WinUI3应用程序,最新版本的WindowsAppSDK也有同样的问题。我发现可以通过删除 GroupName 来解决这个问题。这些是可以复制此问题的最少步骤: 使用 Windows 应用程序打包项目创建新的空白打包 WinUI3 应用程序 创建新的用户控件,将基类更改为 ContentDialog 并添加新的单选按钮 此组件的 Xaml <ContentDialog x:Class="RadioButtonGroupCrash.Dialog" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" IsPrimaryButtonEnabled="True" IsSecondaryButtonEnabled="True" PrimaryButtonText="Ok" SecondaryButtonText="Cancel"> <StackPanel> <RadioButton x:Name="rb1" GroupName="group"> </RadioButton> <RadioButton x:Name="rb2" GroupName="group"> </RadioButton> </StackPanel> </ContentDialog> 隐藏代码 using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace RadioButtonGroupCrash { public sealed partial class Dialog : ContentDialog { public Dialog() { this.InitializeComponent(); Loaded += Dialog_Loaded; } private void Dialog_Loaded(object sender, RoutedEventArgs e) { rb1.IsChecked = true; } } } 在MainWindow代码中显示对话框 private async void myButton_Click(object sender, RoutedEventArgs e) { await new Dialog() { XamlRoot = App.MainWindow.Content.XamlRoot }.ShowAsync(); } 似乎是 WinUI3 框架中的一个错误。 回复 GitHub 上跟踪的此问题: 此问题已得到解决,并计划在下一个预览版 1.6 中发布。 问题源于托管垃圾收集与内部单选按钮表的交互。当单选按钮被命名时,它会被输入到一个内部表中,在确定选中新按钮时取消选中哪个按钮时会搜索该表。该条目将保留在此表中,直到单选按钮被破坏,但通过垃圾收集,它可以在从树中删除后保留一段时间。因此,当您显示/隐藏内容对话框时,您可以在此内部表中获取该对话框的多组单选按钮。这是正确处理的,除非垃圾收集的时机恰到好处。当垃圾回收发生时,它会在 UI 线程之外进行,因此它只会部分破坏 UI 元素,然后安排其余部分在 UI 线程上完成。如果在垃圾收集已部分销毁该项目之间出现复选框选中的更改,但 UI 线程尚未完成该销毁,则单选按钮代码不会意识到,即使它仍然存在,但它处于错误状态最终导致这次崩溃。我们已经修改了流程,不再依赖垃圾收集中部分破坏的任何数据。 GitHub 问题 - ContentDialog 中带有 GroupName 的 RadioButton #8534

回答 1 投票 0

继电器命令不执行

我已经查看了有关此主题的其他一些问题,但尚未找到解决方案。 数据绑定正在工作,我使用不同的标签和输入字段进行了测试以确保。我没有获得数据绑定

回答 1 投票 0

.NET Maui 如何在涉及图标的弹出菜单中执行非常具体的操作

抱歉标题不好...我想不出一种方法来用一句话解释我想要做什么。另请注意,该平台完全是 Android 的(我认为这并不重要,但我可以...

回答 1 投票 0

将 MAUI ControlTemplate 绑定到 ContentPage 视图模型

我正在尝试添加一个通用控件,我希望出现在应用程序中每个内容页面的底部(这些都将位于 TabBar 内)。我在 App.xaml 中创建了一个 ControlTemplate,然后我放置了 Picker...

回答 2 投票 0

是否可以将 MahApps 的 TextBoxHelper 应用于 ScrollViewer?

我正在构建一个 WPF 应用程序,其中有一个 TextBox。要对其应用圆角,在这里我读到我需要使用边框内的 ScrollViewer 创建特定的样式。到目前为止一切顺利,b...

回答 1 投票 0

元素之间的空白空间.NET MAUI

整个页面是一个网格。我试图将子网格放置在父网格的顶部。这适用于 Android。在 Apple 上也适用于 iPhone 14。在 iPhone 14 和 15 上,父母和...

回答 1 投票 0

使用 MCT 弹出窗口的 CarouselView 中的标签文本在 MAUI 中溢出

在 MAUI 社区工具包 (MCT) 弹出窗口中使用 CarouselView,轮播数据模板中设置的标签似乎溢出。设置一个固定的WidthRequest小于po的宽度...

回答 1 投票 0

使用MVVM将ListView绑定到ObservableCollection

我正在开发一个毛伊岛应用程序。我使用 MVVM 结构和 MVVM 社区工具包来更轻松地生活。现在,我在显示绑定到 My

回答 1 投票 0

使用指标加载数据的正确方法

我想在加载数据时显示活动指示器。 正确的方法是什么? 当我导航到此页面时,加载指示器根本不显示,在导航过程中感觉就像一个

回答 1 投票 0

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