问题标签 [wpf-controls]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2137 浏览

wpf - WPF 四元上下文菜单

注意此问题已更新,请继续阅读

你好,

我想创建一个自定义上下文菜单,它有 4 个子菜单,每个子菜单都在自己的象限(左上、右上、左下、右下)。类似于 3ds Studio Max。

到目前为止,我是这样处理这个问题的: - 创建一个自定义 WPF 控件,派生自 ContextMenu[1]
- 声明 ContextMenu 的 4 个依赖属性,这些将是显示的菜单,并且可以从 XAML 中设置。
- AddOwner 到 ContextMenu.IsOpenProperty,添加属性更改通知。
- 当 IsOpen 属性更改时,设置 4 个子上下文菜单的 IsOpen 属性。
- 使用 ContextMenuService 设置上下文菜单的垂直和水平偏移量,使它们出现在每个象限中;绑定实际的高度和宽度属性来计算偏移量。

[1] 需要从上下文菜单派生,否则不能将其分配给 Window 上的 ContextMenu 属性。

似乎可行,菜单保持打开存在问题(由于焦点在菜单之外,它们正在关闭),但我确信使用 Reflector.NET 可以找到解决方法。

这是我尝试编写的第一个自定义 WPF 控件;并且不确定这是否是最好的方法。

关于如何创建这个四元上下文菜单的任何建议/想法?

0 投票
2 回答
395 浏览

wpf - DependencyProperty:VS找不到绑定的源

我正在尝试将 Forderground 依赖属性绑定到我的 UIControl,以便它以用户希望的颜色绘制。由于 myUiControl.Foderground 自动完成,我想我可以像这样将它绑定到 XAML 文件中:

调试 VS 时说它找不到与此 DependencyProperty 绑定的源。但我不知道为什么会这样。

另外,如何在调试时列出对象的所有依赖属性?

0 投票
8 回答
260685 浏览

c# - 以编程方式将列和行添加到 WPF Datagrid

我是 WPF 的新手。我只想知道我们应该如何以编程方式将列和行添加到 WPF 中的 DataGrid。我们过去在 Windows 窗体中执行此操作的方式。创建表列和行,并将其绑定到 DataGrid。

我相信 WPF DataGrid 与 ASP.net 和 Windows 表单中使用的有点不同(如果我错了,请纠正我)。

我有我需要在 DataGrid 中绘制的行数和列数,以便用户可以编辑单元格中的数据。

0 投票
3 回答
448 浏览

wpf - WPF 用户控件

我现在面临一个非常大的问题,那就是我有用户控件(由我创建),我已经添加到一个窗口中......点击按钮我想在窗口上显示另一个用户控件,我怎么能访问我的窗口对象控制(用户控制)

谢谢大家

0 投票
2 回答
416 浏览

wpf - 切换标签

我的 TabControl 中有两个选项卡。每次用户从一个选项卡切换到另一个选项卡时,我都需要运行一个方法(检查是否需要将数据保存到数据库)(切换可以是任何方向:从 tab1 到 tab2 以及从 tab2 到 tab1)。我该怎么做呢?

我考虑过使用附加到每个选项卡的 ButtonBase.Click 事件,但由于某种原因它不会触发。

编辑:我忘了提到我希望能够“取消”事件,以防用户决定不保存更改并且必须“导航回”到他或她试图离开的选项卡。

0 投票
2 回答
1064 浏览

wpf - 关闭标签的问题

我有一个用标签组织的 WPF 应用程序。我在每个 tabitem 标题中添加了一个小按钮,允许用户关闭选项卡。

当用户单击小按钮时,我从 tabControl 中删除了 tabItem。

tabControl.Items.Remove(tabItem);

结果 tabItem 消失了,这很好,但问题来了:

TabItem 不可见(好),但它仍然存在(坏)。如果我在里面放了一个计时器,计时器会执行他的 Tick,更重要的是,如果我有一个包含 200.000 条记录的数据网格并且我关闭了选项卡,那么垃圾收集器不会像我预期的那样释放内存。

我向谷歌询问了这个问题,并且我已经实施了一些描述的建议。它没有用。

谁能帮我?谢谢

0 投票
1 回答
50954 浏览

wpf - 在 WPF 中启用滚动条

我现在遇到一个问题,当窗口垂直太小时,我的 WPF 应用程序会隐藏折叠下方的任何内容。如何使用 XAML 为整个应用程序显示垂直滚动条,以便用户可以滚动查看其余内容?

0 投票
1 回答
1130 浏览

wpf - WPF 绑定转换器

我目前陷入了以下情况的死胡同:

我有一个List<Category>集合,每个集合都Category包含一个Id,Name和一个List<string[]>名为的属性Subcategory(其中数组包含该子类别的Nameand Id- 我不想创建另一个类)。

我有一个正确绑定到类别和子类别的方法TreeViewHierarchicalDataTemplate我在树节点旁边还有复选框,我绑定IsCheckedMultiBinding子/类别的 Id 和应检查的子/类别的整体列表。

我使用的转换器只是检查我提供的子/类别的名称是否是列表的一部分(两者都是我绑定的值)。这很好用,总的来说我对结果很满意。

问题在于将检查/取消检查转换回来。当用户更改IsChecked值时,我必须将子/类别的 ID 添加到所有已选中类别的列表中,或者从中删除该 ID。不幸的是,当我尝试为 实现ConvertBack()方法时IMultiValueConverter,我只能访问已更改的 ACTUAL 值(IsChecked 的真或假值),并且无法访问特定复选框绑定到的子/类别的 Id .

我尝试过但失败的解决方案:

  1. 在进行初始转换时保存子/类别名称不是一个选项,因为我对所有子/类别使用相同的转换器,因此我只会保存我尝试转换的最后一个子/类别。

  2. 使用MouseUp/KeyUp事件是没有用的,因为(无论出于何种原因)它们无法被触发(一个错误?)。

我正在考虑忽略ConvertBack()并使用Checked/Unchecked事件,但觉得这是一个相当“肮脏”的解决方案,因为我不妨完全忽略绑定!这是唯一的出路吗?我已经没有选择了,但仍然希望有一个“好的”解决方案,如果它在那里的话!

0 投票
7 回答
87089 浏览

wpf - wpf中的链接按钮

如何让 Button 看起来像 LinkBut​​ton,而且我不想使用超链接...!!

有什么建议么

0 投票
2 回答
2645 浏览

wpf - 在 WPF 中编写自定义仪表控件的最佳方法是什么?

我需要在 WPF 中为工作中的项目编写一个仪表控件。通过仪表控制,我的意思类似于传统的汽车速度计:一个圆形的表面,圆周上有数字和刻度,还有一个指向当前值的指针。虽然我可以让我的雇主购买第三方控件,甚至在某个地方找到免费的,但出于好奇,我仍然想自己编写它。

我的第一个想法是使用模板“剥皮”现有控件,例如 ProgressBar,因为它具有最小值、最大值和值属性。但是,我认为这不会为我提供所需的灵活性。

我想为指向当前值的指针设置动画,这样当仪表的值发生变化时,指针就会从旧值移动到新值。我认为最简单的方法是使用某种形状或几何形状来表示针,然后应用相关度数的 RotateTransform 以使针指向正确的值。动画的 To 属性将通过绑定设置为“value degree”属性。

在我看来,我可以采取三种基本方法:


使用一个自定义 FrameworkElement 来表示我可以从 FrameworkElement 派生的整个仪表,覆盖其 OnRender 方法,然后使用 DrawingContext 来绘制仪表面和针。这意味着我不能再直接使用 RotateTransform 为针设置动画,而是必须在每次值更改时重新绘制整个仪表。这对我来说似乎效率低下,因为仪表面代表了大部分绘图代码,但很少会改变。但是,就使用的元素数量而言,这种方法是最轻量级的。

使用两个自定义 FrameworkElements,一个用于面部,一个用于针
我目前倾向于这种方法。一个元素代表脸,另一个元素代表针。这将允许我使用 RotateTransform 来定位针元素。然后,仪表控件将由三个元素组成:面、针和一个面板容器来容纳它们(即画布、网格等)。所以三个元素而不是一个元素,因此不像第一种方法那么轻量级。

使用 DrawingVisuals 绘制脸部和针头
我也读过有关 DrawingVisual 类的信息,但我有点困惑,为什么有人会使用它而不是从 FrameworkElement 派生并覆盖 OnRender,因为 DrawingVisual 必须托管在无论如何自定义FrameworkElement。与第二种方法相比,这种方法似乎没有任何优势,并且需要更多代码,但也许我遗漏了一些东西。

任何关于人们认为哪种方法最好以及为什么最好的想法或建议都会受到欢迎!