Tag: wpf

如何使用Simple Injector依赖项的WPF控件

我想在我必须将资源注入GUI控件的场景中使用dependency injection。 因为这可能是错误的地方,我有一些理由在这里做而不是在视图模型中(例如,我需要Window句柄等)。 构造函数参数注入似乎是首选方式。 正如大多数人所知,WPF控件必须具有无参数构造函数,否则XAML不起作用,对于当前场景,我喜欢保留我的XAML,因为它包含一些名称注册和绑定。 那么:我如何在WPF + XAML场景中使用构造函数-DI(如果可能的话,在Simple Injector的情况下)? 是否存在标记扩展,或者XAML解析器是否可以成为Container-Aware并接受具有参数的构造函数作为控件? 方案示例: 和: public class WhateverResourceNeedingViewer : ItemsControl { public WhateverResourceNeedingViewer(Dep1 d, DepResource d2) { … } … }

用户右键单击时打开所有文件并选择“打开方式”

我有一个用WPF / C#编写的应用程序,可以将多个文件作为命令行参数。 当我从命令行运行多个文件时,它会打开所有文件。 当我在资源管理器窗口中选择多个文件并将它们拖到应用程序图标时,它会打开所有文件。 但是,如果我在资源管理器中选择多个文件并右键单击,请选择打开方式,然后选择我的应用程序,它只打开最后一个。 有没有办法告诉Windows我的应用程序可以处理多个文件? 我注意到有些程序似乎以这种方式工作,而其他程序则没有。

WPF:MenuItem.CommandParameter绑定设置为null

我为我的数据网格定义了以下ContextMenu: CommandViewModel类定义如下: public class CommandViewModel : ICommandViewModel { public CommandViewModel(string name, Image icon, ICommand command, object commandParameter = null, int index = 0) { Name = name; Icon = icon; Command = command; CommandParameter = commandParameter; Index = index; } public string Name { get; set; } public Image Icon { get; set; } public […]

自定义RoutedEvent作为EventTrigger

我有自己的形状类 public sealed class MirrorTile : Shape 在这堂课中,我添加了这个活动 public static readonly RoutedEvent SelectedEnterEvent = EventManager.RegisterRoutedEvent(“SelectedEnter”, RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MirrorTile)); public event RoutedEventHandler SelectedEnter { add { this.AddHandler(SelectedEnterEvent, value); } remove { this.RemoveHandler(SelectedEnterEvent, value); } } 并希望以这种方式使用它 在starup之后我得到了exception: {“RoutedEventConverter cannot convert from System.String.”} 我做错了什么,我该如何解决这个问题?

如何在鼠标hover上设置ComboBox背景样式?

我有一个包含ComboBox的圆形边框 当我的鼠标没有hover在Combobox的顶部时,它看起来很漂亮和透明。 像这样: 当鼠标hover在它上面时,它会生成旧的,类似Button的背景,如下所示: 我希望ComboBox具有透明背景,即使鼠标在顶部也是如此。 我尝试了各种方法,包括编写MouseEnter,MouseLeave,MouseMove以将背景设置为null,但没有成功。 private void ComboBox_MouseEnter(object sender, RoutedEventArgs e) { comboBox1.Background = null; } 然后我尝试设置样式: 这也没用。 然后我尝试修改控件模板: 最糟糕的是,在我修改控件模板后,ComboBox消失了,如下所示: 我已经尽了一切可能,但只要我的鼠标hover在我的ComboBox上,我仍然会得到那个丑陋的按钮背景。 谁知道这里出了什么问题?

分层窗口与模糊效果

我非常喜欢在iOS中可以看到的效果,它基本上看起来像是在当前视图顶部绘制的图层,使视觉内容模糊并将其用作背景。 有没有办法在WPF中实现类似的东西? 我见过人们主要在Window级别处理这种模糊/透明度,但我需要在窗口内。 让我们说这是我窗口的内容。 看起来像 而现在我想在其上面绘制一些东西(而不是使用红色背景),在它下面的任何物体上使用它作为背景,保持它的内容不是blury。

将事件绑定到ViewModel

我正在为我的应用程序使用WPF和PRISM框架。 我使用的模式是MVVM(模型 – 视图 – ViewModel),我试图将MouseLeftButtonUp事件从View中的代码隐藏到ViewModel(因此事件将根据MVVM规则)。 现在我有这个: View.xaml: View.xaml.cs(代码隐藏): public partial class UC1001_DashBoardConsultants_View { public UC1001_DashBoardConsultants_View(UC1001_DashboardConsultantViewModel viewModel) { InitializeComponent(); DataContext = viewModel; } } ViewModel.cs: public void EmployeeGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { // insert logic here } 主要的想法是,当我点击DataGrid中的一个单元格时,事件将会触发。 我首先在后面的代码中尝试了它,并且它有效。 我到目前为止使用EventTriggers,但是当我调试并单击一个单元格时,我的调试器没有进入该方法。 有谁知道如何解决这个问题? 提前致谢! PS:当我这样做时,它是否也与(对象发送者)参数一起使用? 因为我需要在我的ViewModel中使用DataGrid来获取我刚刚点击的ActiveCell。 编辑: 事件绑定与Command一起工作! 我在我的DataGrid中有这个: 如何将Tag属性绑定到ViewModel? 我知道它已经从ViewModel绑定了,但是你可以看到值来自一个数组/列表和每列的值是不同的。

如何覆盖MeasureOverride以查找ItemsControl的大小

我正在开发一个UserControl,它包含一个带有标题和项目列表的块(作为ItemsControl )。 usercontrol动态添加到canvas。 我需要在渲染之前获取控件的实际大小(包括ItemsControl占用的空间)。 我尝试重写UserControl的MeasureOverride方法,希望大小将反映在DesiredSize属性中。 但它没有用。 XAML是: 我正在覆盖UserControl的MeasureOverride,如下所示: namespace MyTools { public partial class MyControl : UserControl { public MyControl() { InitializeComponent(); } public string ControlName { get; set; } public object MyItems { get; set; } public class Row { public string MyVal { get; set; } } protected override Size MeasureOverride(Size availableSize) { […]

WPF / C#不要阻止UI

我有一个现有的WPF应用程序,它有几个部分。 每个部分都是UserControl,它实现了一个接口。 该接口指定了两个方法: void LoadData([…])和bool UnloadData() 。 这些方法由UI线程调用,因此如果耗时,我们需要在后台工作中完成我们的工作。 LoadData没有问题,因为我们可以异步更新UI。 问题出在UnloadData()上。 如果我们真的可以离开当前视图,这应该返回。 这是使用当前数据状态(已保存/已修改/无效)计算的: 保存返回true, 无效询问您是否要保留一些正确的数据或不保存而离开 修改后告诉您可以取消更改(返回true),继续编辑(返回false),保存当前数据(返回true) 问题在于“修改 – >保存”。 这是一个耗时的方法,所以为了尊重应用程序的原理,我们应该在后台线程(带忙指示符)中运行它。 但是如果我们只是启动线程并转到下一部分,它将返回“true”到方法调用,我们将直接启动下一个视图。 在我的情况下,在保存本地数据之前加载下一个视图可能是个问题。 所以: 有没有办法在返回“true”之前等待后台线程完成,而不阻止UI? public bool UnloadData(){ if(…){ LaunchMyTimeConsumingMethodWithBackgroundWorker(); return true;//Only when my time consuming method ends } //[…] } 重要的编辑也许我不清楚:我知道如何使用BackgroundWorker或TPL。 我的问题是父类(调用UnloadData()的类是一个我无法编辑的类(由于多种原因:它在另一个不会重新加载的DLL中,它已经与70多个userControl一起工作,所有这些都在单独的项目(dll),由reflection加载。 这不是我的选择,我觉得它不好,但我现在要处理它。 我一直在寻找方法让我的方法等待返回我的方法。 我不确定是否有可能。 但我正在寻找一种解决方法,它将为我节省数周的工作量。

获取组中所选RadioButton的索引

我有一个RadioButton rb1的引用。 如何在rb1的组中获取所选RadioButton的索引? 我用Google搜索了一段时间但没有成功。 任何帮助将不胜感激