相关疑难解决方法(0)

Excel作为WPF中的嵌入框架已禁用ExcelWorksheet

我找到了一个使用Windows 的SetParent()函数在WPF中设置Excel实例的解决方案.

问题是,鼠标和键盘不会对工作表做出反应,而是对工作簿做出反应.

完整示例项目在此处下载

我也试过WindowsFormsHost,但它具有相同的效果.

XAML

<Window x:Class="ExcelEditor.SimpleWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:ExcelEditor"
    mc:Ignorable="d" Loaded="Window_Loaded" Closing="Window_Closing"
    Title="SimpleWindow" Height="450" Width="800">
<Grid x:Name="LayoutRoot">

</Grid>
Run Code Online (Sandbox Code Playgroud)

C#代码

    using System;
    using System.Windows;


namespace ExcelEditor
{
    /// <summary>
    /// Interaktionslogik für SimpleWindow.xaml
    /// </summary>
    public partial class SimpleWindow : Window
    {
        private Microsoft.Office.Interop.Excel.Application ExcelApplication;

        public SimpleWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(this); // <- testing only (no success)
            ExcelApplication = new Microsoft.Office.Interop.Excel.Application();
            ExcelApplication.DisplayAlerts = false;
            System.Windows.Interop.HwndSource …
Run Code Online (Sandbox Code Playgroud)

.net c# windows excel pinvoke

14
推荐指数
1
解决办法
394
查看次数

多DPI系统上的VSTO自定义任务窗口显示内容两次

我正在使用VSTO构建办公室插件.在具有不同DPI设置的多个监视器的系统上,我的自定义任务窗格的内容在具有较高DPI设置的监视器上绘制两次:

在此输入图像描述

只有较小的版本实际上响应用户输入.较大的版本似乎只是一个放大的图像.

我尝试过使用各种DPI相关设置,例如:

  • AutoScaleMode在我的用户控制上.我尝试了所有选项,没有变化.
  • 将过程设置为DPI可识别 - 或不 - 使用SetProcessDpiAwareness.我尝试了所有选项,没有变化.
  • 使用app.manifest并设置dpiAwaretruefalse.没变.

新的Web Addins没有这个问题.此外,内部任务窗格没有此问题.

这是一个已知的问题吗?我怎样才能解决这个问题?

c# powerpoint vsto ms-office office-interop

12
推荐指数
2
解决办法
878
查看次数

VSTO Word 2016:Squiggly下划线而不影响撤消

我正在开发一个实时语言分析工具,需要使用VSTO加载项(使用C#编写的.NET4.6.1编写,突出显示单词以引起Word 2016中作者的注意).想一想语法/拼写检查,它会在单词下面添加一条波浪线,以显示该单词具有语法错误或拼写错误.我为我自己定义的一些规则添加了一个类似的功能.

我搜索周围添加波浪线,并无意中发现了Font.UnderlineFont.UnderlineColor.我把它设置在一个单词的范围内,它似乎提供了我追随的视觉效果.但是有一个问题.我添加或加下划线颜色的每个下划线都会向撤消堆栈添加撤消操作.

我不希望这种情况发生,或者我想要一种方法来弹出我刚才在堆栈代码中执行的操作.目的是让用户能够使用CTRL + Z删除他更改的文本,而不会影响我的语言分析结果.

我该怎么做呢?

.net c# vsto ms-word

11
推荐指数
1
解决办法
837
查看次数

BUG:无法在DatePicker上选择不在浮动VSTO加载项之外的日期

在这里记录了微软的问题 - 可以下载Repro:https://connect.microsoft.com/VisualStudio/feedback/details/741454/value-change-event-doesnt-fire-for-datetimepicker-controls-used-在-VSTO-插件

如果将DateTimePicker放在Excel VSTO浮动加载项中并在日历下拉时将其定位,则它位于加载项的边缘之外,请参见此处:

在此输入图像描述

选择绿色中圈出的任何日期按预期工作,但点击任何以红色圈出的日期时,它只会关闭日历下拉菜单并且不会设置日期!

有谁知道我怎么解决这个问题?

编辑

这个SO用户使用WPF遇到了这个问题: VSTO WPF ContextMenu.MenuItem在没有引发的TaskPane外部单击

在此输入图像描述

该问题的答案显示该问题已被报道连接一段时间但仍然没有VSTO 4.0 SP1的解决方案:https://connect.microsoft.com/VisualStudio/feedback/details/432998/excel-2007-vsto-custom-任务窗格与- WPF的上下文菜单具有焦点,问题

其中一个解决方法是使用DispatcherFrame来为消息添加消息并为菜单订阅GotFocusEvent和LostFocusEvent.http://blogs.msdn.com/b/vsod/archive/2009/12/16/excel-2007-wpf-events-are-not-fired-for-items-that-overlap-excel-ui-for- wpf-context-menus.aspx但这是菜单的所有WPF代码,而不是Winform DateTimePicker的解决方案.

Repro for Microsoft Connect:

使用TaskPane的新项目> Excel 2010加载项; 使用Microsoft.Office.Core;

namespace ExcelAddIn2 {public partial class ThisAddIn {TaskPaneView MyTaskView = null; Microsoft.Office.Tools.CustomTaskPane MyTaskPane = null;

using TaskPane;
using Microsoft.Office.Core;

namespace ExcelAddIn2
{
public partial class ThisAddIn
{
    TaskPaneView MyTaskView = null;
    Microsoft.Office.Tools.CustomTaskPane MyTaskPane = null;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    //setup custom taskpane …
Run Code Online (Sandbox Code Playgroud)

.net c# excel vsto datetimepicker

10
推荐指数
1
解决办法
1820
查看次数

在Windows 10平板电脑上的Windows窗体应用程序中发送到错误控件的垂直滑动模拟鼠标事件

我正在尝试在Windows 10平板电脑(Dell Venue 8 Pro)上运行Windows窗体应用程序.通常,Windows将触摸事件转换为明显的鼠标事件对应物.然而,它正在做垂直滑动的奇怪事情.

我的应用程序有一个自定义控件(直接从其构造函数中Control调用派生SetStyle(ControlStyles.Selectable..., true)),显示Direct3D呈现的图形.控件将MouseDown- > MouseMove- > MouseUp序列解释为旋转关于外观位置的视图的请求.这在桌面上运行良好,但在平板电脑上它会中断:我的自定义控件上的垂直滑动以某种方式被Windows捕获并传递到附近DataGridView,在那里它们被解释为滚动表格的请求.在DataGridView我的控制是不一样的容器下的兄弟姐妹; 它们处于完全不同的控制层次级别.这是一个截图:

应用程序的屏幕截图显示了垂直和水平滑动的不同解释

我做了一些调试,以证明在垂直滑动过程中没有任何鼠标事件可以控制我.当我抬起手指时,右边有一些涓涓细流,但在垂直滑动过程中没有任何东西.

问题似乎是我的代码(在事件处理程序中)根本没有运行,因为没有输入正在进入我的控制.

这里发生了什么,有什么办法可以告诉Windows不要将我控件上发生的垂直滑动事件发送到一个完全不相关的控件?

编辑:我应该补充一点,我Focus()在我的代码中调用了所有地方,以确保我的控件在鼠标悬停时聚焦.我把它放在OnMouseMove,OnMouseDown并且几乎每个其他鼠标事件.

编辑:我已经构建了一个小型Visual Studio 2010解决方案来演示此问题.这里有太多的代码可以在线重现,但很容易理解.构建它,将其安装在Windows 10平板电脑上,然后尝试在最右边的控件中垂直滑动.请注意,而不是那个控件接收一堆鼠标事件,DataGridView火灾Scroll.

更新:我已经明确测试了在DataGridView获取Scroll事件时我的控件是否集中.如果我如上所述呼叫Focus()我的控制以响应MouseMove等等,我的控制确实得到焦点并在垂直滑动时保持它DataGridView.Scroll.在DataGridView.Scroll事件处理程序中,我打印出我的控件是否是焦点,它是.所以这不是DataGridView偷窃重点的问题; DataGridView即使我的控制力集中,这也是我操控滑动的问题.

注意:如果我设置dataGridView.ScrollBarsScrollBars.None,则滑动的鼠标事件会转到我的控件.我一直在弄乱丑陋的黑客,每当我的控制集中注意力时隐藏滚动条,并在每次聚焦时显示它们DataGridView.但他们都是丑陋的黑客,有令人不快的副作用.

c# scroll touch winforms windows-10

8
推荐指数
1
解决办法
741
查看次数