Tag: wpf

如何在WPF中模拟控制台?

我想要一些正确的方向,甚至是解决这个问题的方法,而且我很困难(我只是初学者/中级): 我正在尝试在我的应用程序中实现SSH。 SSH后端工作正常等,但我被困在前端。 WPF-Combination会给我一个足够的模拟控制台的解决方案吗? 抛开一个完整的终端仿真,我很乐意将readline / writeline简单地写成一个看起来像控制台的东西:-) 我最好的方法是80×50的单个字符网格,导致4000个单细胞,感觉就像一个完全矫枉过正。 另一个想法是制作一个控制台-Appl。 绑定到另一个项目中的wpf窗口。 但是……这是可能的,怎么样?

使用DPI使WinForms正确扩展的问题

我遇到了让WinForms应用程序在高DPI设置下正确显示的问题。 我检查了各种网站,WinForms都有正确的AutoScaleMode。 我已经尝试将它设置为DPI和Font。 但是,当使用高DPI设置(例如125%)时,表格总是在底部附近被切断。 我添加了一些代码来检查,如果我将AutoScaleMode设置为DPI,当表单加载时,我看到表单加载时AutoScaleDimensions为120,120,而CurrentAutoScaleDimensions也为120,120。 在Form.designer.cs文件中,有一行将AutoScaleDimension设置为96,96。 如果我将AutoScaleMode设置为Font,那么我可以在设计器中看到AutoScaleDimension已正确设置为新的System.Drawing.SizeF(6F,13F),但是当表单加载时,AutoScaleDimension和CurrentAutoScaleDimension都设置为8F,16F。 这个应用程序混合了一些WPF和WinForms,WPF屏幕首先出现。 因此,基于混合WinForms和WPF应用程序中的.Net 3.5中的DPI Scaling,我尝试为应用程序设置TextFormattingMode,并为首先显示的WPF屏幕设置“显示”,但它没有任何区别。 坦率地说,我不知道造成这种情况的原因。 我想我可以通过在运行时检测DPI来添加代码来以编程方式resize,但我不应该这样做。 AutoScaleMode(和相关的)属性应该使这相当自动化。 那么我还应该检查哪些可能会导致这个问题呢?

WPF中的键值对combobox

考虑我绑定到ComboBox的键值对集合(Ex键= MSFT值= MSFT Microsoft)。 DisplayMemeberPath =价值。 以下需要完成 在选择项目时,只需要在Combo中显示Key, 用户还可以在组合中键入一个全新的值。 我不能提出支持这两个function的解决方案。 解决一个打破另一个。

StoryBoard – 从代码隐藏中设置目标名称

我有资源中的StoryBoard 在WindowClosing上我有下一个代码 private void NotifyWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { Storyboard fading = this.Resources[“Fading”] as Storyboard; if (fading != null && !fadingCompleted) { fading.Completed += FadingStoryBoard_Completed; fading.Begin(); e.Cancel = true; } } private void FadingStoryBoard_Completed(object sender, EventArgs e) { fadingCompleted = true; Close(); fadingCompleted = false; } 这工作正常,但我想将这个故事板移动到另一个组件。 所以我需要指定StoryBoard.TargetName表单代码。 我怎样才能做到这一点?

使用MVVM重置combobox中的combobox选定项目

我在我的WPF应用程序中使用ComboBox并跟随MVVM。 我想在ComboBox中显示一个字符串列表。 XAML: 查看型号: public Collection ItemsCollection; // Suppose this has 10 values. private string _selectedItem; public string SelectedItem { get { return _selectedItem; } set { _selectedItem = value; Trigger Notify of property changed. } } 现在这段代码工作得很好。 我可以从视图中进行选择,我可以在ViewModel中进行更改,如果我从ViewModel更改SelectedItem,我可以在我的视图中看到它。 现在这就是我想要实现的目标。 当我从我的视图中更改所选项目时,我需要检查值是好/坏(或任何)设置所选项目,否则不设置它。 所以我的视图模型就像这样改变了。 public string SelectedItem { get { return _selectedItem; } set { if (SomeCondition(value)) […]

MVVM更新计算的属性

我只是在学习MVVM,而我正在努力研究如何根据计算出来的值的变化来显示对计算属性的更改。 到目前为止,我见过的所有解决方案都严重违反了封装,我想知道是否有更好的解决方案。 假设我需要显示的一件事是复杂税收计算的结果。 计算(可能还有它的依赖关系)会不时改变,所以我想保持严格的封装。 这里最经常提供的解决方案似乎是获取税值所依赖的所有属性,以便在ModelView中为属性本身以及依赖于它的每个属性调用PropertyChanged。 这意味着每个属性都需要知道使用或可能使用它的所有内容。 当我的税收规则以一种使计算依赖于以前不依赖的事物的方式改变时,我将需要触及所有进入我的计算的新属性(可能在其他类中,可能不在我的控制之下),让他们为税值调用PropertyChanged。 这完全破坏了封装的任何希望。 我能想到的最好的解决方案是让进行计算的类接收 PropertyChanged事件,并在进入计算的任何更改时为税值引发新的PropertyChanged事件。 这至少保留了类级别的封装,但它仍然违反了方法封装:类不应该知道方法如何工作。 所以,我的问题是,有更好的方法(如果是的话,它是什么)? 或者表示封装(MVVM)是否阻止了业务逻辑的封装? 我是否面临过任何选择?

WPF keyDown响应时间准确性

我正在开发一个应用程序,用户可以看到某些内容,并且必须通过单击键盘上的键来做出反应。 反应时间至关重要,越精确越好。 我只用几行代码编写了示例app inf WPF来测试默认设置: namespace Test { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private Stopwatch sw; public MainWindow() { InitializeComponent(); sw = new Stopwatch(); sw.Start(); this.KeyDown += OnKeyDown; } private void OnKeyDown(object sender, KeyEventArgs keyEventArgs) { sw.Stop(); lbl.Content = sw.ElapsedMilliseconds; sw.Restart(); } } } lbl是一个简单的标签。 奇怪的是,当我按下例如空格并按住它时, […]

调用线程必须是STA,因为许多UI组件在WPF中需要此错误。 在form.show()上

首先,我在网站上阅读了几个类似问题的答案,但说实话,我发现它们有点令人困惑(由于我缺乏经验而不是答案!)。 我正在使用FileSystemWatcher()类来监视正在创建/更改的文件的文件夹。 一旦事件发生,我就想在项目中加载另一个表单。 而不是加载表单我在新表单上的构造函数尝试执行时得到错误。 我只使用一个线程 – 我不是试图在不同的线程下加载表单。 我的代码如下 //MainWindow public static void FolderWatcher() { FileSystemWatcher fsWatcher = new FileSystemWatcher(); fsWatcher.Path = “C:\\dump”; fsWatcher.Filter = “*”; fsWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; fsWatcher.Created += new FileSystemEventHandler(OnChanged); fsWatcher.EnableRaisingEvents = true; } public static void OnChanged(object source, FileSystemEventArgs e) { var imagePreview = new ImagePreview(); […]

c#WPF如何在不声明新源的情况下从mediaended事件处理程序重复播放MediaElement?

我在WPF中播放video。我希望它循环播放所以我所做的是当媒体播放事件触发时,我播放我的video。 所以这会给我一个循环。 问题是为什么ui必须再次创造新的来源? 为什么我不能称之为’玩’? 出于某种原因,我不想在XAML中这样做。 看看我的代码片段: string startPath System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); public Window1() { InitializeComponent(); media.Source = new Uri(startPath + @”playlist.wpl”); media.play(); } private void Media_Ended(object sender, EventArgs e) { media.Source = new Uri(startPath + @”playlist.wpl”); //if i dont put this line, video wont play..seems like it cant get the source media.Play(); } 或者是否有一种正确的方法来循环NOT在XAML中,但在这里.cs文件?

所有像素的高效像素着色器总和

如何使用HSLS像素着色器有效地计算图像中所有像素的总和? 我对Pixel Shader 2.0感兴趣,我可以调用它作为WPF着色器效果。