我需要使用滑块控制视频位置(在另一种情况下还控制文档页面)。但问题是我不知道如何确定滑块值是否由用户(单击、拇指拖动...)或绑定更改。仅当滑块值从 UI 而不是从绑定更新时才可能触发某些事件?
我已经实现了一个自定义滑块:
public class NotifyingSlider : Slider
{
public static readonly DependencyProperty ValueChangedFromUIProperty =
DependencyProperty.Register("ValueChangedFromUI", typeof(ICommand), typeof(NotifyingSlider));
public ICommand ValueChangedFromUI
{
get
{
return (ICommand)GetValue(ValueChangedFromUIProperty);
}
set
{
SetValue(ValueChangedFromUIProperty, value);
}
}
protected override void OnThumbDragCompleted(DragCompletedEventArgs e)
{
base.OnThumbDragCompleted(e);
ValueChangedFromUI?.Execute(null);
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonUp(e);
ValueChangedFromUI?.Execute(null);
}
}
Run Code Online (Sandbox Code Playgroud)
但ValueChangedFromUI只有当用户将拇指拖动到特定位置或单击栏精确到勾号位置时才会执行命令。当用户在两个刻度之间单击(因此值/拇指移动到较近的刻度)时,命令不会执行 - 这对我来说是一个主要问题。
我有一个带有矢量字形集的 XAML ResourceDictionary。
ResourceDictionary 示例(带有单个字形):
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas Width="32" Height="32">
<Path Fill="#FF444444">
<Path.Data>
<PathGeometry Figures="M27.125 21.688c0-0.438-0.125-0.875-0.5-1.188l-3.688-3.688c-0.313-0.375-0.75-0.5-1.25-0.5s-0.875 0.188-1.25 0.563c0 0 0.125 0.125 0.313 0.313s0.313 0.313 0.375 0.375c0.063 0.063 0.188 0.188 0.313 0.375 0.125 0.125 0.188 0.25 0.188 0.438 0.063 0.125 0.063 0.313 0.063 0.5 0 0.438-0.125 0.875-0.5 1.188-0.313 0.313-0.688 0.5-1.188 0.5-0.188 0-0.313 0-0.5-0.063-0.125-0.063-0.313-0.125-0.438-0.25-0.188-0.063-0.25-0.188-0.375-0.25-0.063-0.063-0.188-0.188-0.375-0.375s-0.25-0.313-0.313-0.313c-0.375 0.313-0.563 0.75-0.563 1.25s0.125 0.938 0.5 1.25l3.625 3.688c0.375 0.313 0.75 0.5 1.25 0.5 0.438 0 0.875-0.188 1.188-0.5l2.625-2.563c0.375-0.375 0.5-0.75 0.5-1.25zM14.563 9.125c0-0.5-0.125-0.875-0.5-1.188l-3.625-3.75c-0.375-0.313-0.75-0.5-1.25-0.5-0.438 0-0.875 0.188-1.188 0.5l-2.625 2.625c-0.375 0.313-0.5 0.75-0.5 1.188 0 …Run Code Online (Sandbox Code Playgroud) 我需要在外部屏幕上显示一个窗口(例如连接到 Macbook 的显示器)。但我不知道如何区分 MacBook 的内部屏幕和外部屏幕。调用NSScreen.screens()返回所有屏幕的列表,在我的例子中,索引 0 的屏幕是我连接的外部屏幕,索引 1 的屏幕是我的内部(内置)MacBook 屏幕。但文档说:
\n\n\n返回数组中索引 0 处的屏幕对应于 user\xe2\x80\x99s 系统的主屏幕。
\n
那么为什么我连接的屏幕被标记为主要屏幕?所有系统上的外部屏幕是否都标记为主要 => 我可以假设在所有连接外部屏幕的系统上该屏幕是否位于 0 位置?
\n\n另外,OS X 底座仅在我的内部屏幕上可见,我认为默认情况下底座在主屏幕上可见,但事实并非如此。
\n\n有没有办法可靠地确定正确的外部屏幕?
\n我需要检测物理连接到计算机的显示器的数量(以确定屏幕配置是否处于单一、扩展、重复模式)。无论System.Windows.Forms.Screen.AllScreens.Length和System.Windows.Forms.SystemInformation.MonitorCount收益计算虚拟屏幕(桌面)的。
因此,如果有 2 个以上的显示器连接到 PC,我可以使用此值决定复制/扩展模式,但我无法确定是否只有一个物理显示器连接到 PC,因此屏幕配置为单屏模式。
在我的 OS X 应用程序中,我需要使用 Esc 键关闭全屏窗口。因此,我将我的实例设置NSWindowController为窗口的第一响应者(从控制器中的代码动态创建),keyDown用我的自定义实现覆盖该函数以关闭窗口。但不幸的是,当窗口设置级别为 时CGShieldingWindowLevel,不会调用keyDown函数keyUp(当然,在按 Esc 之前,我单击全屏窗口,因此窗口应该具有焦点)
我正在使用以下命令创建窗口:
self.window = NSWindow(
contentRect: screen.frame,
styleMask: NSBorderlessWindowMask,
backing: NSBackingStoreType.Buffered,
defer: false,
screen: screen
)
if let w = window {
w.level = Int(CGShieldingWindowLevel())
w.backgroundColor = NSColor.blackColor()
w.makeKeyAndOrderFront(self)
w.makeFirstResponder(self)
self.webView = WKWebView(frame: w.frame, configuration: config)
w.contentView = webView!
}
Run Code Online (Sandbox Code Playgroud)
并使用以下方法处理密钥:
override func keyDown(theEvent: NSEvent) {
if (theEvent.keyCode == 53) {
self.window?.close()
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Office 主互操作程序集从我的 WPF 应用程序控制 PowerPoint。目前我在我的项目中使用 PIA v14,它可以与 Office 2010 和 Office 2013 一起使用,没有任何问题。但我还需要添加对 Office 2007 的支持(当我在装有 Office 2007 的计算机上测试我的应用程序时,它不起作用)。
所以,我的问题是:我是否应该将项目中引用的 PIA 更改为 v12(以支持 Office 2007/2010/2013),或者可以将 v12 和 v14(也可能是 v15)PIA 添加到项目中并动态加载正确的应用程序启动期间程序集的版本基于目标计算机上安装的 Office 版本?另外,如果我在所有 Office 版本 (2007/2010/2013) 上使用 PIA v12,是否存在一些兼容性风险?
我正在寻找一个设置/插件,强制编辑器将所有出现的多字符相等运算符显示为其相应的 UTF-8 字符(\xe2\x89\xa1、\xe2\x89\xa0...)。我确信这是可能的 - 我在 WebStorm 的一些屏幕截图中看到了它。有谁知道如何打开此行为?
\n