Tag: wpf

MVVM – 用户控制相互通信的理想方式是什么

我有一个用户控件,其中包含其他几个用户控件。 我正在使用MVVM。 每个用户控件都有一个相应的VM。 这些用户控件如何相互发送信息? 我想避免在后面的xaml代码中编写任何代码。 特别是我对控件(主用户控件内部)如何相互通信以及如何与容器用户控件进行通信感兴趣。 编辑 :我知道使用事件代表将帮助我解决这个问题。 但是,我想避免在xaml代码隐藏中编写任何代码。

使用WPF进行数据绑定复杂对象模型

我正在努力重构一些用C#编写在WPF之上的旧代码。 我目前有一个复合用户模型,如下所示: public class UserModel{ public User User {get; set;} public List Permissions {get; set;} } 在此模型中,权限列表是授予模型引用的用户的权限ID的列表。 在我的用户管理屏幕的xaml中,我有一个绑定到combobox的这些模型的列表,当选择更改时,所选项目绑定到包含User属性和Items Control的文本框的Grid。 当页面加载时,此项控件将填充绑定到系统中所有权限的复选框。 我的问题是将权限列表绑定到项目控件中的复选框的最佳方法是什么? items控件的代码如下所示: 权限集合是此对象的List: class SelectedPermission{ public Guid PermissionId {get; set;} public string Description {get; set;} public bool IsSelected {get; set;} } 我最初的想法是在SelectedPermission集合上实现INotifyPropertyChanged,当我绑定我的用户时,只需将IsSelected设置为true即可授予所选用户的任何权限。 但似乎应该有更好的方法。

在WPF中,Windows Forms中的Suspend / ResumeLayout()和BackgroundWorker()相当于什么

如果我在后面的代码中的函数中,并且我想在状态栏中实现显示“正在加载…”,则以下内容是有意义的,但是正如我们从WinForms中知道的那样是NoNo: StatusBarMessageText.Text = “Loading Configuration Settings…”; LoadSettingsGridData(); StatusBarMessageText.Text = “Done”; 我们现在从WinForms第1章101类开始,在整个函数完成之前,表单不会显示对用户的更改…这意味着“加载”消息将永远不会显示给用户。 需要以下代码。 Form1.SuspendLayout(); StatusBarMessageText.Text = “Loading Configuration Settings…”; Form1.ResumeLayout(); LoadSettingsGridData(); Form1.SuspendLayout(); StatusBarMessageText.Text = “Done”; Form1.ResumeLayout(); 在WPF中处理这个基本问题的最佳做法是什么?

C# – 将大文件加载到WPF RichTextBox中?

我需要将一个~10MB范围的文本文件加载到WPF RichTextBox中,但我当前的代码正在冻结UI。 我尝试让后台工作人员进行加载,但这似乎也不能很好地工作。 这是我的加载代码。 有没有办法改善其表现? 谢谢。 //works well for small files only private void LoadTextDocument(string fileName, RichTextBox rtb) { System.IO.StreamReader objReader = new StreamReader(fileName); if (File.Exists(fileName)) { rtb.AppendText(objReader.ReadToEnd()); } else rtb.AppendText(“ERROR: File not found!”); objReader.Close(); } //background worker version. doesnt work well private void LoadBigTextDocument(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; […]

在Visual Studio 2017 RC中缺少Reportviewer工具

我刚开始在名为visual studio 2017 RC的新版Visual Studio中编写报告软件,但只是注意到Windows窗体和WPF应用程序模板都缺少核心报告查看工具。 任何人都可以告诉我为什么reportviewer工具从视觉工作室2017消失了? 没有它真的遇到麻烦。 在新的Visual Studio中有没有可以使用此工具的替代方案?

WPF:显示GridView项目的上下文菜单

我有以下GridView : 现在我想在右键单击有界项目时显示上下文菜单,这将允许我检索在后面的代码中处理事件时选择的项目。 我可以通过哪种方式实现这一目标? [更新] 按照Dennis Roche的代码,我现在有了这个: 但是在运行时,我收到了这个例外: 无法将“System.Windows.Controls.ContextMenu”类型的内容添加到“System.Object”类型的对象中。 标记文件’MusicRepo_Importer; component / controls / trackgridcontrol.xaml’中对象’System.Windows.Controls.ContextMenu’出错。 问题是什么?

WinForms的免费或开源图表组件

我需要能够以编程方式生成依赖关系图。 我希望它能够生成一堆带有标签和连接器的盒子,理想情况下,组件会将它们自动定位到设计表面上,然后可以手动重新排列。 我正在使用WinForms和C#2.0(VS2005)。 编辑:但是,因为它将是一个内部工具,如果在该领域有任何建议,我可以使用3.5 SP1和WPF。 必须是免费或开源的。 有什么建议?

如何在C#中找到开始,结束和交叉点的BezierSegment的控制点 – AKA Cubic Bezier 4点插值

我一直在努力寻找一种可以理解的方法来做到这一点。 我有四个点,一个StartPt,EndPoint和Intersection点来表示贝塞尔曲线中的峰值和谷值。 C#中的BezierSegment需要start,controlPoint 1,controlPoint 2,endpoint – 但是我没有任何控制点我只有这两个点位于bezier曲线上(我称之为上面的交点)…我可以计算出两个控制点吗? 在此先感谢,这一直让我发疯。 这里有一些解释: http : //www.tinaja.com/glib/nubz4pts1.pdf,但它是用postscript写的,而且这种语言对我来说毫无意义 – 这是我的头脑。

关于开发独立分辨率应用的技巧

找到工作区测量并在代码中设置一些属性以便它可以绑定到xaml中的Control的边距或高度/宽度属性是一个好习惯吗? 我这样做是为了让我的窗口根据可用的工作区resize。 const int w = SystemParameters.WorkArea.Width; const int h = SystemParameters.WorkArea.Height; public Thickness OuterGridMargin { get; } MainViewModel() { OuterGridMargin = new Thickness(w/5,h/6,w/5,h/4); } XAML: 我为一些外部容器执行此操作,以便布局不会以较低的分辨率混淆。 目前我在20英寸的1600×900 res(96 dpi)下工作。我的应用程序是小工具,没有常规窗口。 我想知道是否有一些替代方法。 搜索[wpf]分辨率] 1提出了许多解决类似问题的问题,但我仍然陷入困境,无法得出如何实现良好的分辨率无关布局的结论。

在Windows中绑定Image.Source到String?

我有以下XAML代码: 此外,还有一种方法可以从Base64字符串生成图像: Image Base64StringToImage(string base64ImageString) { try { byte[] b; b = Convert.FromBase64String(base64ImageString); MemoryStream ms = new System.IO.MemoryStream(b); System.Drawing.Image img = System.Drawing.Image.FromStream(ms); ////////////////////////////////////////////// //convert System.Drawing.Image to WPF image System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(img); IntPtr hBitmap = bmp.GetHbitmap(); System.Windows.Media.ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); Image wpfImage = new Image(); wpfImage.Source = imageSource; wpfImage.Width = wpfImage.Height […]