Tag: wpf

需要一个非常定制的大型Winforms网格

我即将开发一个Windows PC应用程序(它可以是WinForms或WPF),我主要担心的是我必须解决的UI问题。 基本上,我需要有一个大约50×50的网格,我需要从用户那里获得输入。 这是2500场。 实际上大多数将留空,大约10%将由用户填写。 每个字段可以是空白的,也可以是1到4的数字。我想要简单的输入 – 也许是一个下拉框(因为用键盘键入所有2500个字段没有意义,我希望用户填写使用鼠标的值)。 我在考虑下拉框或者甚至是标签,当你点击它们时会改变价值,但问题是(从我做过的测试中)添加2500种任何类型的控件会使界面非常慢。 我尝试在winForms应用程序中使用tablelayoutpanel,使用suspend / resumeupdate函数,还有doublebuffering,这有点帮助,但它仍然非常慢。 我不愿意去DataGridView路由,因为我需要非常自定义标头,我需要UI来自动更新一些百分比,因为用户更改了字段中的值。 但如果这是我唯一的选择,我不会反对。 我听说WPF可能会更好,因为你可以有很多控件,而且每个控件都没有自己的窗口处理,而且还有虚拟化(不确定实现有多难)。 我愿意接受建议。 我知道有人会建议打破网格,我最终可能会这样做。 无论哪种方式,我想知道在Windows应用程序中使用许多控件的大型网格的最有效方法,就像我要在不破坏网格的情况下开发它一样。 我正在使用VS 2013,在C#,.NET 4.0中开发。 谢谢!

绑定到资源键,WPF

我有一个带有一些图像的ResourceDictionary: 我为树视图项创建了一个HierarchicalTemplate ,如下所示: 现在,当显示项目时: Textblock显示FolderItemImage 显示第一张图片 未显示第二张图像。 整个想法是将项目图像设置为存储在资源中的图像,但不幸的是,上面介绍的技术不起作用,现在我知道,为什么: 结果: PresentationFramework.dll中出现未处理的“System.Windows.Markup.XamlParseException”类型exception 附加信息:无法在“DynamicResourceExtension”类型的“ResourceKey”属性上设置“绑定”。 ‘绑定’只能在DependencyObject的DependencyProperty上设置。 所以我不得不重新提出我的问题:如何将模型中存储的某些数据(可能是?)转换为动态资源? 它必须是一个动态资源,因为我确信它可能会在运行时发生变化。

c#WPF如何以编程方式设置控件的位置,宽度和高度?

我正在做我的第一个WPF应用程序。 我有问题,当我的表格最大化或全屏时,我的控件不会resize,只是停留在同一位置。 只有表格最大化。 在winform中,我可以在.cs中进行调整,如下所示: panel6.Width panel6.Height panel6.Location 这将帮助我设置它,如果我的表格最大化。我通过使用一些算术,我得到屏幕的分辨率和一些计算,并获得值,并可以将其设置为宽度,高度和位置。 但这是在WINFORM中。 我将如何解决WPF中最大化和全屏的问题? 有没有办法通过.cs文件以编程方式完成? 或WPF是否有一个简单的内置控件来解决这个问题? 假设这个例子我在WPF中使用dockpanel。 如果窗口最大化但其他控件仍然存在则毫无意义。 有任何想法吗?

从TreeView获取SelectedItem?

有谁知道如何从TreeView获取SelectedItem(而不是Header)? 这是我的代码: 请注意,有3个不同的列表,包含3种不同的对象类型。 有很多东西可以帮助我: public Object SelectedObject { set { _selectedObject = value; RunMyMethod(); RaisePropertyChanged(“SelectedObject”); } } 提前致谢! 干杯

WPF程序集引用丢失 – 项目仍在构建中

我试图在我的解决方案中使用WPF的动态数据显示库。 我在我的项目中添加了对DynamicDataDisplay.dll的引用。 我还在.xaml中添加了一个命名空间,如下所示: xmlns:d3=”http://research.microsoft.com/DynamicDataDisplay/1.0″ 当我尝试从动态数据显示库添加元素时,Intellisense没有帮助我。 当我在.xaml中输入类似的内容时: Visual Studio会将其标记为错误,其中包含以下文字: The type ‘d3:ChartPlotter’ was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built. 但奇怪的是它仍然编译。 有人可以告诉我我做错了什么吗? 下面是一个示例代码,它编译得很好,但在设计器中显示错误: 编辑: 我尝试了像Merlyn Morgan-Graham建议的名称空间声明,但它仍然不起作用。 发生了另一个错误 Unable to load the metadata for assembly ‘DynamicDataDisplay’. This assembly may have been downloaded from the web. […]

如何从代码后面访问数据模板中的控件?

嗨我在DataTemplate有一个MediaElement但我无法从后面的代码中访问它。 我发布下面的xaml代码: 代码背后: private void lbivid_Selected(object sender, RoutedEventArgs e) { imagePreview.Visibility = Visibility.Hidden; string urlStr = (VidList.Source).ToString(); Uri temp = new Uri(UrlStr); videoPreview.Source = temp; } 你能不能告诉我怎么办?

相当于C#中的PostMessage与主线程与MVVM同步?

我必须坚持不懈地寻找,因为这是我无法解决的另一个看似常见的问题。 这是我的问题 – 我正在使用WPF和MVVM,并且我有一个在模型中执行的状态机。 如果发生错误,我需要将信息传递给ViewModel以显示错误。 这部分似乎工作正常。 当用户单击所需行为时,模型中的代码将继续,并查看用户与之交互的对象以确定下一步操作。 问题是模型需要重新加载文件,该文件使用所述文件的内容更新GUI。 因为模型在一个线程中执行,你可以想象我接下来要问的问题 – 你到底该如何正确地与GUI同步? 在MFC中,我会使用SendMessage或PostMessage来完成GUI更新。 我读过WinForms的文章 ,建议使用InvokeRequired在必要时自动调用BeginInvoke。 我实际上不知道BeginInvoke会完成我想要的东西,所以我被鼓励学习这个。 我如何从我的模型中实际调用BeginInvoke? 这种方法甚至适用于WPF吗? 我继续并实现了一个委托,然后调用了Invoke,但是我得到了同样的错误,告诉我无法从这个线程修改集合。 我也尝试过BeginInvoke,但我认为这也行不通,因为它无论如何都会从另一个线程启动。 困惑。 如果我错过了一些非常明显的内容,这些内容已经发布在互联网上,请继续给我一个口头抨击,我可能应该得到它。 编辑 – 我应该补充一点,我正在寻找除定时器或基于BackgroundWorker的解决方案以外的东西,除非这是在WPF / MVVM中解决这个问题的唯一方法。 另外,我想知道是否有任何MVVM工具包已经具有此类function的设施……

MoveFocus从一个列表框移动到另一个列表框

我有类似Windows 8开始菜单的输出。 这是我输出的屏幕截图: 我通过从这个问题获得帮助成功地获得了输出。 XAML用于实现以下输出: 因此,从上面的代码中你可能已经理解Group和Ledger是listbox1的两个项目。 和其他四个是listbox2的项目。 要求: 假设,在listboxA中选择了ItemA1。 案例1:新行为 如果ListBoxA在Item1的右侧没有任何项目,那么当我按向右箭头键时,焦点应该移动到listboxB的ItemB1。 同样,如果选择了listboxA的ItemA2,则焦点应该移动到ListBoxB的ItemB2。 案例2:默认行为 如果ListBoxA在ItemA1的右侧有一些项目,则应通过按右箭头键选择该项目。 我默认有这种行为,但我不想打扰它。 我的意思是在实现Case1时我不想放弃默认行为。

如何在弹出窗口关闭后直接使用combobox来正确设置焦点

当用户从combobox中选择值时,如果他们选择了一个值,则会触发“SelectionChanged”事件并设置新值并且一切正常。 但是,如果他们决定不更改值并单击UI上的其他位置(如他们要编辑的文本框),则必须单击两次 – 第一次单击只需关闭combobox弹出窗口,然后下一次单击将关注他们想要在第一次点击时激活的元素。 如何阻止combobox弹出窗口在第一次点击时劫持焦点目标? 我已经尝试过监视ComboBox_LostFocus事件,但这会在错误的时间触发。 当用户单击下拉列表并显示弹出列表时,ComboBox_LostFocus事件将触发 – 它将失去焦点到它自己的下拉列表。 我不想做任何改变。 当用户点击然后弹出窗口关闭时,ComboBox永远不会重新获得焦点(焦点只是’丢失’到所有东西),因此这个事件是无用的。

故事板无法找到ControlTemplate元素

我创建了一些相当简单的XAML,并且它完美地运行(至少在KAXML中)。 从XAML中调用时,故事板运行完美,但当我尝试从外部访问它时,我得到错误: ‘buttonGlow’ name cannot be found in the name scope of ‘System.Windows.Controls.Button’. 我正在使用流阅读器加载XAML,如下所示: Button x = (Button)XamlReader.Load(stream); 并试图运行故事板: Storyboard pressedButtonStoryboard = Storyboard)_xamlButton.Template.Resources[“ButtonPressed”]; pressedButtonStoryboard.Begin(_xamlButton); 我认为问题是我动画的字段在模板中,故事板正在访问按钮。 这是XAML: Test 任何了解WPF和XAML的人都比我好多了? 这是错误堆栈跟踪: at System.Windows.Media.Animation.Storyboard.ResolveTargetName(String targetName, INameScope nameScope, DependencyObject element) at System.Windows.Media.Animation.Storyboard.ClockTreeWalkRecursive(Clock currentClock, DependencyObject containingObject, INameScope nameScope, DependencyObject parentObject, String parentObjectName, PropertyPath parentPropertyPath, HandoffBehavior handoffBehavior, HybridDictionary clockMappings, Int64 layer) […]