Tag: wpf

如何使用AvalonDock 2.0创建没有自动隐藏的底部面板?

我正在使用AvalonDock 2.0 我觉得它应该是非常基本的,但文档没有说一件事,我已经玩了2个小时试图弄明白。 所以,如果这太简单了,我很抱歉。 我想要标题所说的。 该文档提到了如何制作一个底部面板但只有一个自动隐藏的面板,这不是我想要的。 我试图在代码隐藏中切换它的自动隐藏,但高度没有受到影响所以每次应用程序启动时用户都必须将其拖动以查看面板的内容。

为什么这个刷子的#00FFFFFF值不等于Brushes.Transparent?

我正在通过另一个类的reflection检索画笔列表。 我想确保此List中的某些Brush 不是透明的( #00FFFFFF )。 但是,将它与Brushes.Transparent进行比较会返回false,即使该值实际上是#00FFFFFF 。 var brushes = GetListOfBrushes(); var brush = brushes.First(c => c != Brushes.Transparent); Console.WriteLine(brush); // Prints “#00FFFFFF” 在这种情况下唯一可靠的方法是检查它的字符串表示,如果它以“#00”开头,感觉很黑。 在下面的示例屏幕截图中,从First()调用返回的Brush与谓词匹配,尽管它不应该:

WPF DataGrid删除SelectedItems

最近我一直在研究一个将数据programmicaly导入WPF DataGrid的项目。 我差不多完成了这个项目,但是我遗漏的东西是一个删除选定单元格的按钮,这就是我被困住的地方! 我使用DataGrids的基本知识编写了这段代码: var grid = dataGrid1; if (grid.SelectedIndex >= 0) { for (int i = 0; i <= grid.SelectedItems.Count; i++) { grid.Items.Remove(grid.SelectedItems[i]); }; } 只删除像CurrentItem一样选择的项目,但它不会删除超过2个选定的项目! 我拥有的DataGrid至少应包含至少100个项目。 我添加了一个删除所有选项,但这也是必要的。 如果有人给我解决方案,我会感激不尽。

C#WPF中的TreeView目录

我在C#Windows窗体应用程序中有这个代码,但我需要它在WPF中。 你有什么想法? private void button1_Click(object sender, EventArgs e) { ListDirectory(treeView1, “C:\\Users\\Patrik\\Pictures”); } private void ListDirectory(TreeView treeView, string path) { treeView.Nodes.Clear(); var rootDirectoryInfo = new DirectoryInfo(path); treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo)); } private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo) { var directoryNode = new TreeNode(directoryInfo.Name); foreach (var directory in directoryInfo.GetDirectories()) directoryNode.Nodes.Add(CreateDirectoryNode(directory)); foreach (var file in directoryInfo.GetFiles()) directoryNode.Nodes.Add(new TreeNode(file.Name)); return directoryNode; } 感谢帮助。

线条画即时响应鼠标移动?

我试图弄清楚如何编写代码,以便鼠标移动和线条绘制之间的响应时间是即时的。 每次我这样做总是滞后2.我已经在windows窗体中编码了这个,现在我在WPF编码。 问题肯定在于代码,而不是我的电脑。 Basicaly它的工作原理如下。 单击任意位置并创建point1。 移动鼠标并更新point2并从Point1到Point2绘制一条线,该线在鼠标移动时发生变化。 下面是我执行此操作的极其简单的代码。它可能看起来很快但是如果你最大化窗口并使线条变长并快速移动鼠标,你可以更容易地注意到它。 此外,未来将会有一个图像层,这肯定会导致它更加滞后..但是现在我只想优化它。 当我使用5年多以前的其他类似程序时,线条运动实际上是即时的。 这就是为什么我很困惑为什么这个新的编码,它的滞后… Point mLoc; Line myLine = new Line(); public MainWindow() { InitializeComponent(); SnapsToDevicePixels = false; myLine.Stroke = System.Windows.Media.Brushes.White; myLine.StrokeThickness = 1; canvas1.Children.Add(myLine); } private void onMMove(object sender, MouseEventArgs e) { mLoc = Mouse.GetPosition(canvas1); myLine.X2 = mLoc.X; myLine.Y2 = mLoc.Y; } private void onMLClick(object sender, MouseButtonEventArgs e) […]

强制从代码中关闭所有打开的弹出窗口

我想让所有打开的弹出窗口(使用StaysOpen == false)从代码中关闭。 基本上我想模拟用户从代码中单击鼠标(这将关闭弹出窗口)。 我不需要实际模拟点击,我只需要产生的行为。 我想过只是通过视觉树寻找弹出窗口并关闭每个弹出窗口,但这似乎不是最干净的方法。 在此先感谢任何帮助或意见。

通过TeamViewer连接时,全屏WPF应用程序崩溃

我已经创建了一个非常稳定的WPF应用程序。 但是有一个问题我无法解决。 当我通过TeamViewer(版本11)连接到运行我的WPF应用程序的平板电脑时(在全屏模式下),应用程序崩溃。 当我结束远程连接时也是如此。 我有以下exception: System.ComponentModel.Win32Exception (0x80004005): Cannot create a file when that file already exists at MS.Win32.UnsafeNativeMethods.GetWindowText(HandleRef hWnd, StringBuilder lpString, Int32 nMaxCount) at System.Windows.Automation.Peers.WindowAutomationPeer.GetNameCore() at System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree() at System.Windows.ContextLayoutManager.fireAutomationEvents() at System.Windows.ContextLayoutManager.UpdateLayout() at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg) at System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork() at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget) at System.Windows.Media.MediaContext.AnimatedRenderMessageHandler(Object resizedCompositionTarget) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate […]

在WPF应用程序中使用MVVM / MVVMLight时如何与UI元素交互

根据我下面的代码,我希望能够在单击Button 1时更改Button 2的背景颜色。 XAML文件 ViewModel文件 public class MyViewModel : ViewModelBase { public ICommand Button1Command{get;private set;} public MyViewModel(){ Button1Command = new RelayCommand(() => button1_Click()); } private void button1_Click() { Console.WriteLine(“Button 1 clicked”); // how can I change the background color of Button 2 here this.Dispatcher.Invoke(() => { Button2.Background = Brushes.Red; }); } }

将ObservableCollection绑定到MVVM中的DataGrid

我有一个DataGrid,我绑定到我的视图模型中的ObservableCollection,我需要能够在DataGrid排序时对集合进行排序,以便我可以在其他地方使用此排序顺序。 我目前正在使用ObvservableCollection上的包装器来支持排序。 对DataGrid进行排序时,它只对显示的数据进行排序,而不对集合中的基础数据进行排序。 数据由一个整数列和一个字符串列组成,需要在两者上支持升序和降序排序。 我还希望保持与标准DataGrid排序相同的用法,您可以在其中单击列标题并在升序和降序排序之间切换。 我对WPF比较陌生,所以我不知道数据和命令绑定的所有细节,但我认为有一种方法可以实现我想做的事情。 这是一个示例xaml来说明我的视图设置。 源数据的类型如下: public class myType { public int firstValue { get; set; } public string secondValue { get; set; } // some functions and variables… } 现在,就像我上面所说的,我需要按照排序顺序访问集合中的项目,但它不需要特别是ObservableCollection。 只要我可以在我访问它们时按当前顺序迭代集合中的项目,一切都很好。 我想的可能是ListCollectionView或其他东西。 当新项目添加到集合中时,我也不希望集合重新排序。 任何新项目都应该像通常会发生的那样添加到集合的末尾。 有任何想法吗?

如何更改WPF中绑定选项的默认值?

在我当前的项目中,我使用了几个文本框控件,其内容由来自数据库的对象填充。 该对象使用validation来validation文本的正确插入。 当我想显示validation错误(即文本有多个字符)时,我必须向text属性添加一些绑定选项,如下一行所示: 是否可以创建模板或样式或任何将最后三个选项(ValidatesOnDataErrors,NotifyOnValidationError,UpdateSourceTrigger)的默认值更改为上面代码中的值? 文本框控件应该如下所示: