问题标签 [wpf-4.0]

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 回答
166 浏览

c# - 将对话框中确定按钮的启用状态基于有效控件条目的好方法是什么

即使我将按钮与派生自 的类相关联ICommand,我仍然需要弄清楚按钮应如何触发该CanExecute方法并刷新其启用状态。我确实知道CanExecuteChanged带有关联命令的按钮注册的事件,但请参阅以下段落了解为什么这很麻烦。

在由大约 10-15 个控件组成的普通旧对话框中,必须处理每个控件的每个更改通知似乎很随意,触发CanExecuteChanged按钮命令上的事件,导致按钮的启用状态受到CanExecute方法的影响返回值。即使在最后一句话中说明需要做什么也很麻烦。

必须有更好的方法来编写 WPF 对话框,以便确认按钮(例如,确定)灰显,直到所有控件都具有有效信息并在该时间点启用(即,当所有控件都正确填写时) . 示例代码、想法和文章指针将不胜感激。

谢谢

0 投票
1 回答
420 浏览

wpf - 按钮获得焦点时减少按钮的边距

我有一个场景,我想在 Button 控件获得焦点时减少它的边距。这是因为我不想增加该 Button 控件的边框属性,同时又不想让按钮保持相同的大小(高度和宽度)。所以在网络上的一点点努力引导我编写了一个 ValueConverter 并减少了利润。但我仍然无法提交工作代码。这是我搞砸的

Xaml

转换器:

上面的代码导致堆栈溢出异常,因为 Margin.Left 被递归调用。对于我想要实现的场景,任何人都有更好的想法或实现。

0 投票
2 回答
2825 浏览

wpf - 如何获取 DataGridBoundColumn 的绑定路径

我有一个简单的数据网格,我使用 ItemsSource 将集合绑定到该数据网格。在我的 c# 代码中,我不想检索列的绑定路径。我参考了专栏。这是我提出的非工作代码

0 投票
1 回答
2037 浏览

wpf - 在 DataGrid 中实现过滤(文本和组合框)

我正在尝试编写一些代码,以允许通过 TextBox 或 ComboBox 过滤 DataGrid。我已经为 TextBox 设置了过滤代码,现在对于 Combobox 类型的过滤器,我不太确定这种方法。

首先,我继承了 DataGrid,我所有的过滤代码都放在那里。为了将过滤器放在数据网格上,我选择了 DataGrid 的标题。我不想使用继承的 DataGrid 类中定义的附加属性来控制要显示的过滤器类型。这是其中一个标识要使用的过滤器类型(文本框或组合框)。

它设置在 DataGridColumn 级别。

在 DataGrid ColumnHeaderTemplate 中,我试图阅读上面的附加属性。但是我不知道如何在 ColumnHeaderTemplate 中访问在列级别设置的属性。我将在 Trigger 中使用此属性值将 TextBox 或 Combobox 呈现为过滤器。如何在 ColumnHeaderTemplate(或准确地说是模板触发器)中访问此属性的值

这是 DataGrid ColumnHeaderTemplate 的相关部分

上面的代码运行,但我在所有列中都得到了 Combobox 类型的过滤器,即使某些列将 TextBox 设置为附加属性(FilterType)。这意味着上面的触发器不起作用。任何想法如何访问 datagrid 列中的附加属性集。IE。在 ColumnHeaderTemplate 中访问它更准确。

0 投票
0 回答
1038 浏览

c# - WPF TouchDown 事件延迟

很简单,我在 WPF4 中的 UserControl 上接收 TouchDown 事件时遇到了不可接受的延迟。我对事件堆栈的理解是 PreviewTouchDown 先发送,但仍然需要大约 300ms-500ms。代码如下。

我还在我的窗口代码中添加了以下内容:

这肯定会删除 UI,但不会导致明显的速度增加(即使 TABLET_DISABLE_PRESSANDHOLD 应该这样做,但我怀疑这与添加Stylus.IsPressAndHoldEnabled="False"到 XAML 相同)。

如果有人对如何使这种延迟消失有任何指示,我将不胜感激。

0 投票
1 回答
1360 浏览

wpf - 触发 DataGridTextColumn 的附加属性

我正在尝试在 DataGridTextColumn 上定义一个自定义附加属性,并在我的 xaml 文件中针对它编写一个 DataTrigger。这是在我的类中定义附加属性 (FilterDisplayStyle) 的方式。

上面附加属性的类型是FilterDisplayTypeEnum,定义如下。

这是我在 DataGridTextColumn 中设置此属性的方法

现在我正在尝试使用以下方法检索此属性

但是我在上面的 TextBox 上没有得到任何文本。

令人惊讶的是,我有另一个附加属性(这次是附加到 DataGrid),它工作得非常好。问题仅在于 DataGridTextColumn。此外,使用 WPF Inspector,我看到 Visual Tree 中没有 DataGridTextColumn 的直接可视表示,所以我怀疑是否可以使用 FindAncestor 绑定祖先的方式,即 DataGridTextColumn。任何人都可以在这种情况下帮助我。总而言之,我无法使用 FindAncestor 类型的 Binding 访问在 DataGridTextColumn 上定义的自定义附加属性。有没有其他选择?

问候, 尼尔文

编辑: 根据@Clemens 的建议,我将附加属性的定义更改为这样的。但我仍然无法访问我的 xaml 中的附加属性。

附加属性定义:

我仍然无法访问我的 xaml 代码中的属性“FilterDisplayType”,如下所示

0 投票
1 回答
2874 浏览

wpf - DataGridTextColumn 上的 DataTrigger

我正在尝试在我的一个组合框元素上附加一个数据触发器。触发器应读取 DataGridTextColumn(组合框的祖先)的附加属性并据此做出决定。现在的问题是 DataGridTextColumn 不是 Visual Tree 的一部分,所以我无法通过 RelativeSource Ancestor 获取它。这是示例代码。

任何人都可能提出一些替代方案

编辑:

@denis我不太了解您的解决方案,所以让我详细解释一下。我正在开发一个通用过滤器,它适用于所有需要过滤功能的 DataGrid。DataGrid 定义将通过在 DataGrid 上指定自定义附加属性“IsFilterable”来指定是否要过滤。各个 DataGridColum 将通过在 DataGridColumn 上指定“FilterDisplayType”来指定他们想要的过滤器类型(组合框或文本框)。除了上述之外,DataGrid 将一无所知。然后,过滤器将根据 DataGrid 和 DataGridColumn(所有类型的列)上的上述附加属性来处理所有功能。

0 投票
1 回答
186 浏览

wpf - 我应该如何在 WPF 中实现非基于事件的操作?

我有几年的循环游戏编程背景。我非常习惯在我的应用程序中有一个恒定循环,它不断调用像 Update 和 Draw 这样的函数,允许我通过每帧增加一点值来随着时间的推移执行动画等动作。

不过,现在我找到了一份涉及 WPF 的工作,我发现我太依赖那个系统了。也许我对 WPF 的感觉有限,但似乎一切都是基于事件的。用户单击一个按钮,您通知代码,代码操作值。值改变,代码通知 UI,UI 更新布局。它适用于基于 GUI 的应用程序编程,但我发现当我遇到在基于循环的游戏编程中微不足道的情况时,我会陷入困境,无法找到实现简单行为的好方法。

冒着过于模糊的风险,我将以我当前的问题为例。在 Windows 8 发布后,我对 Semantic Zoom 的想法非常着迷。在广泛使用开始屏幕后,我开始为 Microsoft Surface 开发一个将语义缩放到 WPF4.0 的端口(我在工作中使用 Surface)。我只想要一个简单的例子,它可以让我使用捏合手势在一堆视图中上下导航。

在花了几个小时试图理解操作事件之后(我不会进入那个...... bleh),我终于得到了基于捏合手势的视图缩放。如果它超过某个点,我会跳回“缩小”视图。很酷。但是,问题是,如果用户没有完成手势并决定不缩小,我会得到一个较小的视图。我想为视图的比例设置动画,使其从用户捏合中不断“反弹”并恢复到 1 的比例。我知道这是否是基于循环的,我只会将 Lerp 朝向每帧 1。但是由于 WPF 都是基于事件的,所以我有点迷茫。

使用惯性或不同的操作事件可能会解决这个特定问题(我很高兴听到它),但除此之外,我只想知道如何重新定位我的思维定势,以便在 WPF 中更有效地工作. 仅仅是知道要订阅哪些事件吗?有没有聪明的方法来使用动画来做我想做的事?我应该使用线程来完成这些类型的任务,还是作弊(这似乎不可靠,而且我对 WPF 中的线程感到不安)?

我认为,这个问题是我在 WPF 中有效的最大障碍之一(嗯,这个问题还不太了解 MVVM,正在研究那个)。我希望看到它被拆除,并且能够在不仅仅是基于循环的游戏编程中发挥作用。

0 投票
1 回答
86 浏览

wpf - Prism - 从主视图中删除新添加记录的策略

我有一个典型的主从场景。用户可以在主视图中单击“添加新”并在详细视图中输入详细信息。例如,假设我有产品的 ObservableCollection 列表。当用户单击“添加新”时,我将新的产品记录添加到 ObservableCollection,然后打开一个详细视图以添加产品详细信息。如果用户确实保存了产品,这很有效。但是,如果用户决定取消添加新产品,我如何从主视图中产品的 ObservableCollection 中删除它。现在我可以想到两种方法,第一个是将 ObservableCollection 的引用传递给 Details 视图,第二个是使用事件通知 master 视图关于新的 Product 记录删除。你有什么建议?此外,如果有更好的方法来专门处理棱镜,

问候,尼尔文。

0 投票
4 回答
5908 浏览

wpf - IDataErrorInfo - 首次加载视图时最初忽略错误

我正在尝试使用 IDataErrorInfo 验证我的模型类,如下所示。

这工作正常,除了当视图第一次加载它已经包含验证错误。首次加载视图时是否可以忽略/抑制验证错误。此外,在视图加载时以及在用户开始模型属性的数据输入之前显示错误是否是一种常见的做法。

问候,尼尔文。

编辑: 这就是我设置 IDataErrorInfo 的方式。