Tag: wpf

ReExCommand 上的CanExecute无法正常工作

我正在使用MVVM Light V3 alpha 3编写一个WPF 4应用程序(使用VS2010 RC),并且在这里遇到了一些奇怪的行为…… 我有一个打开一个Window的命令,那个Window创建了ViewModel等等 – 没有什么奇怪的。 在那个Window我有一些RelayCommand ,例如: CategoryBeenSelected = new RelayCommand(() => OnCategoryUpdate = true); 没有什么奇怪的 – 它按照我的预期工作。 问题是我不能使用通用RelayCommand的CanExecute方法/ lambda表达式。 这有效: DeleteCategoryCommand = new RelayCommand(DeleteCategory); 但这不是: DeleteCategoryCommand = new RelayCommand(DeleteCategory, CanDeleteCategory); 窗口没有出现。 我的意思是,我单击打开窗口的按钮,应用程序刚刚被阻止,几秒钟后,Window的InitializeComponent方法抛出NullReferenceException (对象引用未设置为对象的实例) 简而言之,如果我在RelayCommand上放置一个CanExecute方法,那么拥有该ViewModel(带有RelayCommand )的Window无法实例化。 如果我删除了CanExecute , CanExecute显示Window 。 这里的问题在哪里? 我糊涂了。 谢谢。 编辑:根据要求,这是堆栈跟踪: PresentationFramework.dll中出现类型为“System.NullReferenceException”的第一次机会exception 在GalaSoft.MvvmLight.Command.RelayCommand`1.CanExecute(Object parameter) 在System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute() 在System.Windows.Controls.Primitives.ButtonBase.OnCommandChanged(DependencyObject d,DependencyPropertyChangedEventArgs […]

如何刷新/重新加载桌面

我有一个WPF C#项目,我正在实现Windows文件夹选项的设置。 其中之一是“单击以打开项目”(而不是双击)。 当我更改注册表项时,我需要刷新我找到解决方案的Windows资源管理器。 但桌面不刷新,甚至手动刷新它不会应用更改。 我使用过IActiveDesktop :: ApplyChanges方法,但没有用(或者我犯了一个错误)。 我也使用了这段代码片段,但它仍然没有应用我所做的更改: SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero); 这里是我用来刷新Win Explorer的完整代码片段(女巫来自这个网站): [System.Runtime.InteropServices.DllImport(“Shell32.dll”)] private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2); public static void RefreshWindowsExplorer() { // Refresh the desktop SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero); // Refresh any open explorer windows // based on http://stackoverflow.com/questions/2488727/refresh-windows-explorer-in-win7 Guid CLSID_ShellApplication = new […]

必须在与DependencyObject相同的Thread上创建DependencySource

我有一个用wpf编写的应用程序,它可以下载一些网页,解析HTML代码并保存一些值。 class ListOfItems { public List ListToBind; public void DownloadItems() { Task.Factory.StartNew(() => { … … if (OnDownloadCompleted != null) OnDownloadCompleted(this, EventArgs.Empty); } } } class SomeObject { public string NameOfItem; public MyClass Properties; } class MyClass { public int Percentage; public SolidColorBrush Color; } 这是我正在使用的对象模型。 它是简化版本,我不希望你重新组织它,我有这样写道的原因。 在ListOfItems类中是执行所有工作的方法(内部使用一些其他方法使代码可读) – 下载源代码,使用数据解析和填充ListToBind ,fe [0] => NameOfItem = […]

WPF C#以编程方式添加和移动选项卡

我目前正在做一些可能在很多例子中完成的事情。 但经过一番搜索,我找不到任何东西。 我正在使用WPF选项卡控件,我正在尝试重新创建一些基本function(现在在所有互联网浏览器中都可以看到),通过单击最后列出的选项卡的“+”选项卡来添加新选项卡。 我已经在“+”标签中添加了一个新标签。 我的问题是,我想在新标签之后移动’+’标签(因此再次显示结束标签)并将视图切换到刚刚创建的新标签。 我想的是: void tiNewTab_Add(object sender, EventArgs e) { int idx = tabControl1.Items.Count; tabControl1.SelectedIndex = idx – 1; TabItem ti = new TabItemKPI(); tabControl1.Items.Add(ti); tabControl1.Items.MoveCurrentToLast(); } …会工作,但没有运气:( 有任何想法吗? 提前致谢。

WPF窗口设置焦点

我有一个WPF窗口,我只创建一次,然后多次Show()和Hide()。 现在我正在寻找一种方法来将焦点设置在每个Show()上的元素上。 我在哪里以及如何做到这一点?

XAML中的WPF ListView绑定ItemsSource

我有一个简单的XAML页面,其上有一个像这样定义的ListView 在我做的代码中: – public ObservableCollection People { get; set; } public ListView() { InitializeComponent(); this.People = new ObservableCollection(); this.People.Add(new Person() { Name = “John Doe”, Age = 42, Mail = “john@doe-family.com” }); this.People.Add(new Person() { Name = “Jane Doe”, Age = 39, Mail = “jane@doe-family.com” }); this.People.Add(new Person() { Name = “Sammy Doe”, Age = […]

如何禁用框架c#WPF中的导航快捷方式

如何禁用框架中的导航快捷方式(例如,“Backspace”用于向后导航,“Alt +向右箭头”用于向前导航)。 我想使用其他键盘function,所以我想禁用框架的导航快捷方式。 谁能帮我?

使用参数在MVVM Light中打开一个新窗口的最佳实践

我对mvvm和mvvm light相当新,但我想我理解它的一般概念。 我不明白的是,如果我想打开一个新窗口,但该窗口需要来自调用者的数据将这些数据传递到新窗口的最佳做法是什么? 如果我将数据传递给构造函数,那么这意味着我需要在后面的代码中将代码传递给视图模型。 我不能使用消息传递,因为它不是基本数据。 提前致谢。

在wpf中移动无边框窗口

在我的C#WinForms应用程序中,我有一个隐藏默认控件的主窗口。 所以为了让我可以移动它,我将以下内容添加到主窗口: private const int WM_NCHITTEST = 0x84; private const int HTCLIENT = 0x1; private const int HTCAPTION = 0x2; private const int WM_NCLBUTTONDBLCLK = 0x00A3; protected override void WndProc(ref Message message) { if (message.Msg == WM_NCLBUTTONDBLCLK) { message.Result = IntPtr.Zero; return; } base.WndProc(ref message); //Allow window to move if (message.Msg == WM_NCHITTEST && (int)message.Result […]

如何在XAML中使用C#自定义子类?

这是我的问题:我想在MyWindow中使用SurfaceInkCanvas的子类。 我创建了一个这样的C#类: namespace MyNamespace { public class SubSurfaceInkCanvas : SurfaceInkCanvas { private MyWindow container; public SubSurfaceInkCanvas() : base() { } public SubSurfaceInkCanvas(DrawingWindow d) : base() { container = d; } protected override void OnTouchDown(TouchEventArgs e) { base.OnTouchDown(e); } } } 我想在我的XAML窗口中使用它。 这是这样的吗? 我完全走错了路吗?