Tag: wpf

WPF版本的Application.OpenForms

我有一个应用程序,我将不得不进入另一个打开的WPF窗口。 在WinForms中,我能够使用: MainWindow main = (MainWindow)Application.OpenForms[“MainWindow”]; 能够访问表单。 现在在WPF中它不存在。 我已经看到这个网站上的其他post是相关的,但它使用的是不包含在调用中的Application.Window 。 我只有 : 当前 等于 GetContentStream 的getCookie GetRemoteStream GetResourceStream LoadComponet RefrenceEquals ResourceAssembly setCookie方法 所以我的问题是,OpenForms是否有不同的版本,或者只是采用不同的方式。

调用线程无法访问此对象,因为另一个线程拥有它(async / await / task)

我正在使用async / await等将一些长时间运行的代码移动到后台,但是遇到了主题行错误。 我很清楚我无法从任务更新我的WPF UI控件(我已经适当地添加了调度程序)但是这个错误只是更新了我的类中的对象。 例: private WriteableBitmap TempImage; public async void StartProcessing() { WriteableBitmap LoadedImage = new WriteableBitmap(await LoadImage(0)); //ERROR HERE LoadedImage.Freeze(); TempImage = LoadedImage; // do more stuff } private Task LoadImage(int imageIndex) { return Task.Run(() => { FileStream fileStream = new FileStream(fileList[0], FileMode.Open, FileAccess.Read); var img = new BitmapImage(); img.BeginInit(); img.StreamSource = […]

WPF – 集合中属性的OnPropertyChanged

在视图模型中,我有一个名为“ClassA”的项目集合,称为“MyCollection”。 ClassA有一个名为“IsEnabled”的属性。 class MyViewModel { List MyCollection { get; set; } class ClassA { public bool IsEnabled { get; set; } } } 我的视图有一个绑定到MyCollection的数据网格。 每行都有一个按钮,其“IsEnabled”属性绑定到ClassA的IsEnabled属性。 当视图模型中的条件发生更改以使MyCollction列表中的某个特定项需要禁用时,我将IsEnabled属性设置为false: MyCollection[2].IsEnabled = false; 我现在想要通过OnPropertyChanged事件通知此更改的视图,但我不知道如何引用集合中的特定项目。 OnPropertyChanged(“MyCollection”); OnPropertyChanged(“MyCollection[2].IsEnabled”); 两者都不起作用。 如何通知查看此更改? 谢谢!

将可见性绑定到可检查菜单项会在WPF中显示错误“服务提供程序缺少INameResolver服务”

我试图通过上下文菜单显示/隐藏数据网格的列。 我试图使用绑定,使用此XAML: 我甚至尝试过其他选项,例如BindsDirectlyToSource=True和UpdateSourceTrigger=PropertyChanged 。 但是,当我选中/取消选中菜单项时,列不会更改其可见性。 我究竟做错了什么? 这在纯XAML中实际上是否可行? 在这个问题中,答案使用x:Reference 。 我也尝试了但收到了错误 服务提供商缺少INameResolver服务。 Google告诉我这是VS2010中的一个错误? 我该怎么做才能解决这个问题? 或者是我最好的切换到VS2012?

如何在wpf中检测多个键onkeydown事件?

我不想检测任何双键组合,所以解决方案就像 if(Keyboard.IsKeyDown(specificKey)){ } 不会工作,除非当然,我会检查每一个关键状态,我希望我不必这样做。 。 private void TextBox_KeyDown_1(object sender, KeyEventArgs e) { Console.WriteLine(combination of keys pressed); } 编辑:最终目标是检测任何(不是特定组合/单键)组合键。 EDIT2:LadderLogic的解决方案非常有效。

WPF绑定:根据属性设置列表框项文本颜色

我敢肯定这可能是WPF中的基本内容,但我是XAML语法的新手,我正试图绕过它。 安装程序 我有一个LogItem类型 – 只是一个POCO: public class LogItem { public string Message {get;set;} public Color MessageColor {get;set;} } 和我的ViewModel中的LogItem列表: private ObservableCollection _logItems; public ObservableCollection LogItems { get { return _logItems; } set { if (value != _logItems) { _logItems = value; OnPropertyChanged(“LogItems”); } } } 我的viewmodel绑定到视图,以便我可以执行以下操作: (显然我还是要设置显示文本绑定等) 问题 鉴于我在LogItems中有一个Message和MessageColor属性,将项目文本的颜色绑定到我指定的颜色的正确XAML语法是什么?

绑定到DataVM中的SelectedItems或MVVM中的ListBox

在底部看到我的答案 只是在WPF上做一些轻量级阅读,我需要从DataGrid绑定selectedItems,但我无法想出任何有形的东西。 我只需要选定的对象。 数据网格:

wpf datagridcombobox列

我在阅读该领域时遇到了麻烦。 我尝试过不同的方式,但仍然不能。 我想读取用户选择以下3个值的值。 XAML中的代码 C#中的代码 List list = new List (); lista.Add (“Prize”); lista.Add (“Draw”); lista.Add (“Lost”); dgcbc.ItemsSource = list;

在WPF中创建密钥绑定

我需要为Window创建输入绑定。 public class MainWindow : Window { public MainWindow() { SomeCommand = ??? () => OnAction(); } public ICommand SomeCommand { get; private set; } public void OnAction() { SomeControl.DoSomething(); } } 如果我使用一些CustomCommand初始化SomeCommand:ICommand它不会触发。 永远不会调用SomeCommand属性get()。

将canvas保存到png C#wpf

所以我试图在WPF C#中拍摄我的canvas快照,以便我可以将其保存为png。 目前图像保存不正确,因为它包括左边距和上边距。 这就是我所拥有的: 为canvas大小创建一个矩形。 如果canvas.Margin.Left和Top设置为0,则保存的图像大小正确但仍然会发生偏移,从而切割底边和右边。 设置Margin.Left和Top仍会导致偏移发生,但整个图像被保存但尺寸错误(margin.Left + ActualWidth)而不仅仅是ActualWidth Rect rect = new Rect(canvas.Margin.Left, canvas.Margin.Top, canvas.ActualWidth, canvas.ActualHeight); double dpi = 96d; RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, (int)rect.Bottom, dpi, dpi, System.Windows.Media.PixelFormats.Default); rtb.Render(canvas); BitmapEncoder pngEncoder = new PngBitmapEncoder(); pngEncoder.Frames.Add(BitmapFrame.Create(rtb)); try { System.IO.MemoryStream ms = new System.IO.MemoryStream(); pngEncoder.Save(ms); ms.Close(); System.IO.File.WriteAllBytes(filename, ms.ToArray()); } catch (Exception err) { MessageBox.Show(err.ToString(), “Error”, […]