此标记用于Windows 10上Windows-Store-Apps特有的XAML UI框架,是通用Windows平台(UWP)的一部分。
仅使用 DataTable WinUI3 MVVM 中的数据填充 DataGrid
数据表填充有数据库中的数据。 var query = $"SELECT * FROM {databaseTable.Name}"; OracleCommand oracleCommand = new OracleCommand(query, _connection);
使用 c# 修改 SVG 文件的属性并将其设置为 uwp 中图像元素的源
string svgFilePath = "ms-appx:///Assets/Chart.svg"; XNamespace svgNamespace = "http://www.w3.org/2000/svg"; StorageFile svgFile = 等待 StorageFile.GetFileFromApplicationUriAsy...
我正在尝试使用 CotentDialog 获取一些数据并在 UWP XAML 的数据库中更改它,但遇到了一些问题
private async void iconu_PointerPressed(对象发送者,PointerRoulatedEventArgs eventArgs) { if (BigGrid.SelectedIndex == -1) { 内容对话框dialog2 = 新的内容对话框 { ...
我在 UWP 应用程序中设置拖放树视图时遇到问题,用户可以对树中的项目进行重新排序。有一个演示应用程序,我用它来满足我的需要......
我在 UWP 应用程序中遇到问题,我试图在 ContentDialog 中显示图像。但是,图像在对话框中被裁剪,我希望它在没有任何裁剪的情况下显示......
我可以使用 x:Bind 从 DataTemplate 中绑定到视图模型吗?
最低限度的示例: 最基本的例子: <DataTemplate x:Key="CustomTemplate" x:DataType="data:CustomType"> <TextBlock Text="{x:Bind Foo}" Foreground="{x:Bind viewModel.GetColor(Foo), Mode=OneWay}" /> <TextBlock Text="{x:Bind Bar}" /> </DataTemplate> 在此代码中,无法找到 viewModel,因为数据模板正在寻找 viewModel 内的 CustomType。这使用了 x:Bind 的功能,该功能允许在绑定中使用函数。这意味着我无法将 RelativeSource 与 Binding 一起使用来设置绑定查找 viewModel 的路径(尽管即使没有该函数我也无法让它工作)。 有一些非常简单的解决方法。例如,由于 CustomType 是一个 ObservableObject,因此创建一个绑定可以直接读取的 Color 属性是没有问题的,但是因为 CustomType 只是一种数据类型,所以它不应该关心其中发生的情况UI 方面的事情。或者,包装器类(CustomTypeUi或类似的)可以公开额外的功能,但是仅仅针对这样的东西的包装器看起来应该非常微不足道,感觉是错误的,如果可能的话我想避免它。 有解决这个问题的惯用方法吗? 如果DataTemplate是Page的资源,您可以x:Name您的Page,例如ThisPage,然后: <DataTemplate> <TextBlock Text="{Binding ElementName=ThisPage, Path=ViewModel.AwesomeString, Mode=OneWay}" /> </DataTemplate> 但是: 适用于 Binding,但不适用于 x:Bind,因此无法调用方法。 适用于 ListView 或 GridView,但不适用于 ItemsRepeater。 现在,让我向您展示一个使用值转换器的示例。此示例依赖于 Foo 是 string 或可以使用 ToString(),但您也许可以将其应用到您的案例中。 public class StringToColorDictionary : Dictionary<string, Color> { } public class ObjectToColorConverter : IValueConverter { public StringToColorDictionary Colors { get; set; } = new(); public object Convert(object value, Type targetType, object parameter, string language) { return value.ToString() is string stringValue && Colors.TryGetValue(stringValue, out var color) ? new SolidColorBrush(color) : new SolidColorBrush(Microsoft.UI.Colors.Transparent); } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } } <Page.Resources> <local:ObjectToColorConverter x:Key="ObjectToColorConverter"> <local:ObjectToColorConverter.Colors> <local:StringToColorDictionary> <Color x:Key="A">Red</Color> <Color x:Key="B">Green</Color> <Color x:Key="C">Blue</Color> </local:StringToColorDictionary> </local:ObjectToColorConverter.Colors> </local:ObjectToColorConverter> <DataTemplate x:Key="ItemTemplate" x:DataType="local:Item"> <TextBlock Foreground="{x:Bind Foo, Converter={StaticResource ObjectToColorConverter}}" Text="{x:Bind Foo}" /> </DataTemplate> </Page.Resources> <ListView ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{x:Bind ViewModel.Items, Mode=OneWay}" /> 另一种方法是将这个 FrameworkElement.DataContext 绑定到 view 元素。请参阅@mm8的回答https://stackoverflow.com/a/70703773。但似乎view不能是Microsoft.UI.Xaml.Window。 我的测试: <ResourceDictionary> <DataTemplate x:Key="MyDataTemplate" x:DataType="local:Customer"> <StackPanel Orientation="Horizontal"> <TextBlock local:AncestorSource.AncestorType="ListBox" Text="{Binding Tag}" /> ... </StackPanel> </DataTemplate> </ResourceDictionary> 和 <Window x:Class="App2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App2" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> <ListBox ItemsSource="{x:Bind Customers}" Width="350" Margin="0,5,0,10" ItemTemplate="{StaticResource MyDataTemplate}" Tag="aTag"/> </StackPanel> </Window>
最低限度的示例: 最基本的例子: <DataTemplate x:Key="CustomTemplate" x:DataType="data:CustomType"> <TextBlock Text="{x:Bind Foo}" Foreground="{x:Bind viewModel.GetColor(Foo), Mode=OneWay}" /> <TextBlock Text="{x:Bind Bar}" /> </DataTemplate> 在此代码中,无法找到 viewModel,因为数据模板正在寻找 viewModel 内的 CustomType。这使用了 x:Bind 的功能,该功能允许在绑定中使用函数。这意味着我无法将 RelativeSource 与 Binding 一起使用来设置绑定查找 viewModel 的路径(尽管即使没有该函数我也无法让它工作)。 有一些非常简单的解决方法。例如,由于 CustomType 是一个 ObservableObject,因此创建一个绑定可以直接读取的 Color 属性是没有问题的,但是因为 CustomType 只是一种数据类型,所以它不应该关心其中发生的情况UI 方面的事情。或者,包装器类(CustomTypeUi或类似的)可以公开额外的功能,但是仅仅针对这样的东西的包装器看起来应该非常微不足道,感觉是错误的,如果可能的话我想避免它。 有解决这个问题的惯用方法吗? 让我向您展示一个使用值转换器的示例。在此示例中,依赖于 Foo 是 string 或可以使用 ToString(),但您也许可以将其应用到您的案例中。 public class StringToColorDictionary : Dictionary<string, Color> { } public class ObjectToColorConverter : IValueConverter { public StringToColorDictionary Colors { get; set; } = new(); public object Convert(object value, Type targetType, object parameter, string language) { return value.ToString() is string stringValue && Colors.TryGetValue(stringValue, out var color) ? new SolidColorBrush(color) : new SolidColorBrush(Microsoft.UI.Colors.Transparent); } public object ConvertBack(object value, Type targetType, object parameter, string language) { throw new NotImplementedException(); } } <Page.Resources> <local:ObjectToColorConverter x:Key="ObjectToColorConverter"> <local:ObjectToColorConverter.Colors> <local:StringToColorDictionary> <Color x:Key="A">Red</Color> <Color x:Key="B">Green</Color> <Color x:Key="C">Blue</Color> </local:StringToColorDictionary> </local:ObjectToColorConverter.Colors> </local:ObjectToColorConverter> <DataTemplate x:Key="ItemTemplate" x:DataType="local:Item"> <TextBlock Foreground="{x:Bind Foo, Converter={StaticResource ObjectToColorConverter}}" Text="{x:Bind Foo}" /> </DataTemplate> </Page.Resources> <ListView ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{x:Bind ViewModel.Items, Mode=OneWay}" />
WinUI XAML:使用另一个项目中的 ResourceDictionary
在我的 WinUI 3 应用程序中,我尝试使用位于另一个项目中的 ResourceDictionary。 假设引用的项目是 ResourceTestLib,并且该库项目有一个文件夹“
UWP:需要在文本框单击时禁用屏幕键盘 因为我需要调用第三方屏幕键盘。 尝试了下面的代码......但我无法禁用屏幕键盘。
使用 UWP 中 RichEditBox 的 uri 将字体设置为 DefaultCharacterFormat 会引发异常
公共主页() { this.InitializeComponent(); RichEditBox rbox = new RichEditBox(); Canva.Children.Add(rbox); rbox.Document.SetText(0, "asdfasfasdfasdfasdfoiuytredfxbnuytrxgd...
UWP - 当指针位于 ListViewItem 上时 ListView 显示按钮
有一个 ListView,其项目包含可见性设置为 Collapsed 的 Button。 当指针悬停在包含该按钮的 ListViewItem 上时,如何使按钮可见? 可以用
ComboBox SelectedItem 未使用 x:Bind 设置
我试图弄清楚为什么如果我使用 ItemsSource="{x:Bind [source]}" 进行绑定,则无法在 ComboBox 上设置初始 SelectedItem 值。 这个xaml有效 我试图弄清楚为什么如果我与 SelectedItem 绑定,我无法在组合框中设置初始 ItemsSource="{x:Bind [source]}" 值。 这个 xaml 有效 <ComboBox ItemsSource="{Binding Sites, Mode=OneWay}" SelectedItem="{x:Bind ViewModel.SelectedContractSite, Mode=TwoWay}"/> 但是当我更改为以下 xaml 时,ComboBox 包含站点,但默认不显示 SelectedItem。 (事实上,它似乎闪烁进入视野,然后消失)。 <ComboBox ItemsSource="{x:Bind ViewModel.Sites, Mode=OneWay}" SelectedItem="{x:Bind ViewModel.SelectedContractSite, Mode=TwoWay}"/> 这是ViewModel中的相关代码。 (我缩写了很长的站点列表。) public List<string> Sites { get { return new List<string>() { "Miami", "Texas" }; } } private string _selectedContractSite = "Texas"; public string SelectedContractSite { get { return _selectedContractSite; } set { Set(ref _selectedContractSite, value); } } 该问题似乎与您未显示的代码有关。 如果我创建一个像这样的viewModel public class ViewModel : INotifyPropertyChanged { public List<string> Sites { get { return new List<string>() { "Miami", "Texas" }; } } private string _selectedContractSite = "Texas"; public string SelectedContractSite { get { return _selectedContractSite; } set { if (_selectedContractSite != value) { _selectedContractSite = value; OnPropertyChanged(nameof(SelectedContractSite)); } } } public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } 然后像这样设置隐藏代码: public MainPage() { this.InitializeComponent(); this.ViewModel = new ViewModel(); } public ViewModel ViewModel { get; set; } 然后以下 XAML 按预期工作 <ComboBox ItemsSource="{x:Bind ViewModel.Sites, Mode=OneWay}" SelectedItem="{x:Bind ViewModel.SelectedContractSite, Mode=TwoWay}" /> 注意。我正在使用 x:Bind 并在两个绑定路径中引用 ViewModel。 我怀疑您的困惑在于 x:Bind 和 Binding 之间的差异。 对于 x:Bind,绑定路径的根是具有绑定的控件所在的页面。 对于 Binding,绑定路径的根是控件所在页面的 DataContext。 混合两者可能会造成混乱。如果您确实需要使用两者的组合,请在页面构造函数中设置 this.DataContext = this;,以便它们都指向同一对象。 为什么要在 List<string> 属性的 getter 中创建一个新的 Sites ? 尝试仅创建源集合一次: public List<string> Sites { get; } = new List<string>() { "Miami", "Texas" };
WinUI 3 数据绑定适用于一个对象,但不适用于另一个对象
我在 WinUI 数据绑定和 INotifyPropertyChanged 实现方面遇到问题。 我有一个按预期工作的测试类 公共类 BasicNotifyChange : INotifyPropertyChan...
(UWP) 如何从 DataTemplate 中访问我的代码隐藏文件?
这基本上是一个数据绑定问题。 简而言之,我有一个生成项目的 ListView,并使用 DataTemplate 来呈现这些项目。然而,在 DataTemplate 中,DataContext 会...
我有一个按钮。 当我按下标题栏中的最小/最大/关闭按钮时,是否可以调用它? 如果可能的话,如果您能告诉我如何实施,将会很有帮助。 ※在WPF中,可以直接使用
扩展 TabViewItem.Content 超过 TabView 的宽度
我希望标题栏按钮和选项卡布局之间有一个间隙,就像浏览器有 我目前有一个 Microsoft.UI.Xaml.TabView,位于边距为 300 的列上 我正在尝试...
我已经创建了一个适用于 Windows (UWP) 的示例应用程序并注册了一个 URL 方案 我的计划 它有一个 WebView,其源作为我的自定义 URL,例如 http://192.168.1.25:8080/dummywebsite.html 要打开应用程序,我是...
UWP 无法 x:bind MediaTransportControls 的 ControlTemplate 中的数据
我正在自定义UserControl中的MediaTransportControls。 但在 ControlTemplate 中 TargetType="MediaTransportControls", 我无法 x:bind 或绑定代码隐藏中的数据。 在
在 UWP 中绑定到另一个元素的大小(宽度/高度)的正确方法是什么?
UWP 有一个设计问题: ActualHeight/ActualWidth,存储布局操作的结果,始终是实数。但是,由于更新如此频繁,UWP 不会通知...
有没有办法在 win ui 3 中自定义日期选择器弹出窗口?
我想将选择元素的颜色(指示当前日期选择的蓝色条)更改为#020066,并更改弹出窗口的字体系列。 我尝试过使用主题资源