Tag: wpf

动态生成列mvvm

我尝试使用动态生成列创建ListView。 我用mvvm patern。 我该如何实现呢? 在这个momemt我只有静态列。

每列的WPF DataGrid CustomSort

我有一个绑定到CollectionViewSource的WPF DataGrid,它封装了一个ObservableCollection。 此CollectionViewSource有两个主要目标: 1)按T的特定属性对每个项目进行分组。我在GroupDescription中使用ValueConverter来获取我想要的分组行为。 2)通过a)主要对组名称(如上定义)和b)各个组项目对网格进行排序。 我通过将自定义IComparer附加到CollectionViewSource的’CustomSort’属性来实现此目的。 这在大多数情况下都很有用,但是只要单击列标题,就会覆盖排序逻辑。 我不想禁用排序,但是我想知道是否可以为特定列分配自定义排序顺序? 为了使事情更清楚,假设用户单击“ColumnA” – 此时,我的CustomSorter封装的排序逻辑被覆盖,DataGrid现在按该属性排序。 我宁愿颠倒CustomSorter的逻辑,而不是按所选属性进行排序。

检测是否在C#中按下任何键(不是A,B,但是任何键)

[编辑3]我使用“奇怪”版本“解决了它”。 至少对于最重要的键。 这对我的情况来说是足够的,我想检查ALT和ALT + A是不一样的(从而确保没有按下A)。 不完美,但已经有很多时间来解决这个小问题了。 无论如何,感谢所有答案…… [编辑3] [编辑4]由于280Z28 [/ EDIT 4]解决了它更清洁 我知道如何检查修改键以及如何测试单个键。 问题是,我想检查是否按下任何键。 以下方法似乎“奇怪”:-) 用C#编写的WPF应用程序 if (Keyboard.IsKeyDown(Key.A)) return true; if (Keyboard.IsKeyDown(Key.B)) return true; if (Keyboard.IsKeyDown(Key.C)) return true; 我知道这是一个枚举,所以我想到了一个循环,但是使用的“最大数字”是什么。 这可能吗? 顺便说一句,这是一个非常特殊的情况,通常我会使用一个事件,但在这种情况下我必须这样做。 不幸的是,没有“列表”Keyboard.CurrentlyDownKeys。 至少我没有看到它。 谢谢,克里斯 编辑:好的,因为它似乎是一个更大的交易,这里的原因是:我已经定义了一个“KeySet”,它作为自定义函数的DictionaryKey。 如果有人点击某个元素,则包装器会遍历字典并检查是否有任何预定义的“Keysets”处于活动状态。 这允许我定义简单的触发器,例如,如果按下ALT + A + B,则运行此function。 另一个选项是例如,如果按下ALT + STRG + A,则运行此function(在鼠标单击WPF元素期间)。 当前实现的唯一“问题”,如果我定义一个不包含任何REAL键的Keyset,如按下ALT则运行,如果按下ALT + A,也会触发它。 哦,在写这篇文章时,我意识到还有另一个问题。 如果按下ALT + A + B […]

如何在winform和wpf中以编程方式鼠标移动,单击,右键单击和按键等?

如何在winform和wpf中以编程方式鼠标移动,单击,右键单击和按键等。 如果可能的话,请帮我编写代码片段。

绑定到DataConmplate for ItemsControl中的自定义控件

当我想绑定到我的自定义用户控件时,我遇到了基于ItemsControl定义的DataType DataTemplate绑定问题。 出于演示目的,我创建了简单的Item类示例,其中我有这样的项集合: public class Item { public string ItemNameToBeSureWhatPropertyIsBound { get; set; } } 在我的ViewModel中,我创建了这样的集合,并将其公开(有一个项目可以单独进行比较): public class MainWindowViewModel : INotifyPropertyChanged { private ObservableCollection _items; private Item _exampleItem; public MainWindowViewModel() { Items = new ObservableCollection(new[] { new Item { ItemNameToBeSureWhatPropertyIsBound = “Me” }, new Item { ItemNameToBeSureWhatPropertyIsBound = “MySelf” }, new Item { ItemNameToBeSureWhatPropertyIsBound = […]

DataGridTextColumn可见性绑定

我正在尝试将列可见性绑定到另一个元素的可见性,如下所示: 但我在VS输出中得到这个错误: System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=IsChecked; DataItem=null; target element is ‘DataGridTextColumn’ (HashCode=48860040); target property is ‘Visibility’ (type ‘Visibility’) 是否有纯XAML方法来实现这一目标?

在WindowsForm APP中打开WPF窗口

我在我的WindowsForm应用程序中添加了一个名为novoLogin的新WPF窗口。 添加后,我添加了system.xaml参考….调试正常。 现在我正试图从现有的windowsForm中打开这个新窗口。 novoLogin nl = new novoLogin(); nl.show(); 编译器给出了这个错误: 错误1’WindowsFormsApplication1.novoLogin’不包含’show’的定义,并且没有扩展方法’show’可以找到接受类型’WindowsFormsApplication1.novoLogin’的第一个参数(你是否缺少using指令或程序集引用?)

资源更改时静态绑定不会更新

我首先想说我对Binding很新。我已经在WPF中做过一些事情,但我从未使用绑定因为概念对于我而言有点难以理解。 即便如此,我现在正在做的事情是我设法从一个我不完全理解的教程中挽救。 在我的应用程序中,我有一个带有静态属性的静态类,并且有一个静态方法可以更改这些静态属性。 例: public static class AppStyle { public static SolidColorBrush property = Brushes.Red; public static void ChangeTheme() { property = Brushes.Blue; } } 在XAML内部,我有一个控件,它的背景绑定到这个值。 我甚至正确地声明了命名空间。 … xmlns:style=”clr-namespace:CorrectNamespace;assembly=RightAssembly” … 当应用程序加载时,它将加载正确的设置(红色)但是当事情发生变化并调用ChangeTheme()时,静态类将获得新值,但文本框的背景不会改变。 我在这做错了什么? 正如我所说的,我对此非常陌生,我很欣赏外行人的解决方案。 谢谢!

在ListView WPF中设置项目焦点

有没有办法从WPF中的WinForms完成此function? ListView.FocusedItem = ListView.Items[itemToFocusIndex] 我正在尝试在WPF ListView中的项目上手动设置焦点 (而不是选择)。 来自System.Windows.Controls 。 谢谢。

将DataGrid绑定到ObservableCollection

我有一个ObservableCollection并希望将它绑定到DataGrid 。 ObservableDictionary NewRecord1 = new ObservableDictionary(); Dictionary Record1 = new Dictionary(); Record1.Add(“FirstName”, “FName1”); Record1.Add(“LastName”, “LName1”); Record1.Add(“Age”, “32”); DictRecords.Add(Record1); Dictionary Record2 = new Dictionary(); NewRecord2.Add(“FirstName”, “FName2”); NewRecord2.Add(“LastName”, “LName2”); NewRecord2.Add(“Age”, “42”); DictRecords.Add(Record2); 我希望键成为DataGrid的标题,并将每个Dictionary项的值作为行。 设置ItemsSource不起作用。