小编dot*_*NET的帖子

WPF:设置控制高度以填充网格行高

具有3行和3列的WPF网格控件.有问题的行的高度设置为自动.在前两个单元格中,我有两个具有动态高度的控件.在第三个单元格中,我有另一个控件,我希望自动设置为在Grid单元格中拉伸.我试过了VerticalAlignment="Stretch",但这只是设置Grid Row Height等于控件的高度.我有什么选择?

wpf grid height

7
推荐指数
1
解决办法
7692
查看次数

window.postMessage VS window.chrome.webview.postMessage

有何window.postMessage不同 window.chrome.webview.postMessage

我在 a 的上下文中使用它WebView2(在 .NET/WPF 应用程序中)。我们正在WebView2中加载第三方网页。该网页会触发window.postMessage我们需要捕获的某些数据。根据文档,WebView2WebMessageReceived在加载的页面触发时引发事件window.chrome.webview.postMessage,这是正确的。另一方面,它似乎并不尊重window.postMessage(没有WebMessageReceived被解雇)。

这两个API是不同的吗?哪一个是标准的(如 HTML5)?window.postMessage由于我无法要求第三方网站更改其代码以使用 .NET,因此如何捕获.NET 应用程序中的事件window.chrome.webview.postMessage

wpf postmessage chromium webview2

7
推荐指数
1
解决办法
1万
查看次数

渐变填写VB.NET

为什么世界上会出现以下简单代码?无论我使用的是LinearGradientMode的哪个值,此代码始终使用从左到右的渐变填充路径.graphPath是在别处创建的GraphicPath对象(基本上是圆角矩形):

Dim gradBrush as New LinearGradientBrush(rect, color1, color2, LinearGradientMode.Vertical)
graphics.FillPath(gradBrush, graphPath) 
Run Code Online (Sandbox Code Playgroud)

UPDATE

对每个人来说都很奇怪,即便失败(水平绘制).只需创建一个新的VB.NET WinForms项目,并在Form1的Paint事件中粘贴以下代码:

 Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    Dim gradBrush As New LinearGradientBrush(Me.ClientRectangle, Color.Red, Color.White, LinearGradientMode.BackwardDiagonal)
    e.Graphics.FillRectangle(gradBrush, Me.ClientRectangle)
  End Sub
Run Code Online (Sandbox Code Playgroud)

所以我认为这与路径构造没有任何关系.

注意

如果有人能够确认这个问题在他们的机器上发生,我会很高兴,所以我们知道这是GDI +而不是我的代码.仅供参考,我在具有.NET Fx 4.0 Client Profile和Full版本的WinXP VM和Win7机器(32位,Aero模式)上尝试过.

最后

首先,感谢所有帮助我发现它的伟大人物.问题是我正在编辑别人的代码,他们创建了一个名为LinearGradientMode的枚举(以支持他为此目的所需的None选项).现在,当他将此枚举的对象发送到LinearGradientBrush的构造函数时,C#编译器会认为最接近的匹配重载是采用"角度"参数(这是我的理论),并将我的渐变模式的值转换为等效的int (0,1,2,3和4是值)并调用该构造函数,在每种情况下产生(几乎)水平梯度.

再次感谢所有参与的人.

vb.net graphics gdi+

6
推荐指数
1
解决办法
5868
查看次数

声明共享MustOverride

那么为什么不允许Shared MustOverride/ Overridable成员呢?有些人认为覆盖与继承有关,这对Shared成员来说没有意义,因为没有涉及实例化.这是我需要它的一个例子:

我的基类DrawingObject定义了一个Shared名为TypeName必须由每个子类实现的成员,以返回唯一的标识字符串,该标识字符串对于每种子类型都不同,但对于一种子类型的所有实例都是相同的.现在这要求我将TypeName属性定义为SharedOverridable.或者有更好的方法吗?

基类

Public MustInherit Class DrawingObject
    Public MustOverride ReadOnly Property TypeName As String
End Class
Run Code Online (Sandbox Code Playgroud)

儿童班

Public Class Rectangle
    Inherits DrawingObject

  Public Overrides ReadOnly Property TypeName As String
    Get
      Return A_CONST_STRING_DEFINED_IN_THIS_CLASS
    End Get
  End Property
End Class
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但理想情况TypeName应该是Shared因为它返回了一个Const.

vb.net oop overriding shared

6
推荐指数
1
解决办法
946
查看次数

DataGridViewComboBoxColumn在第一次单击时不会打开下拉列表

任何人都标志着这是重复之前,PLZ注意,这是不一样的问题问在这里,这里这里.

如果您有两个或更多个DataGridViewComboBoxColumn,DataGridView并且其中一个的下拉列表当前处于打开状态,则单击其他列的下拉按钮不会打开该下拉列表.相反,你仍然需要点击两次.首次单击会隐藏已打开的下拉列表,第二次单击实际上会打开您单击的下拉列表.

请注意,EditOnEnter模式为ON 时需要两次单击; 否则你必须执行三次点击才能完成这项工作.我也尝试过ContentClick事件,没有任何好处.

那么当DataGridViewComboBoxColumn我的网格中有多个操作时,如何使用一键操作?

更新

以防万一有人想要重现它,这是一个过程:

  1. 创建一个新的WinForms C#项目.
  2. 转到Form1的代码并将其粘贴到InitializeComponent行后面的构造函数中:

    DataGridView dgv = new DataGridView();
    DataGridViewComboBoxColumn col1 = new DataGridViewComboBoxColumn();
    DataGridViewComboBoxColumn col2 = new DataGridViewComboBoxColumn();
    
    dgv.Columns.AddRange(new DataGridViewColumn[] { col1, col2 });
    dgv.Dock = DockStyle.Fill;
    dgv.EditMode = DataGridViewEditMode.EditOnEnter;
    
    col1.Items.AddRange(new object[] { "Cat", "Dog", "Elephant", "Lion" });
    col2.Items.AddRange(new object[] { "Duck", "Hen", "Crow", "Sparrow" });
    
    this.Controls.Add(dgv);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行该项目.单击第一个下拉列表,然后单击另一个下拉列表而不关闭第一个下拉列表.它将需要2或3次点击(取决于您在第二个下拉列表中单击的位置)才能打开第二个列表.

c# datagridview winforms

6
推荐指数
1
解决办法
1939
查看次数

不使用WinForms旋转光标

可以旋转FrameworkElement.Cursor吗?

我的应用程序允许用户围绕其中心旋转对象.旋转后,默认调整大小的光标在倾斜边框上显得很笨拙.

鼠标光标不受变换影响

我的第一个想法是应用于RotateTransformCursor属性,但看起来我们不能在XAML中这样做.接下来我尝试从Cursor类继承,但它看起来像MS家伙拥有sealed它.

另一种方法是将默认光标设置为None并使用我自己的图像(使用变换)并设置其位置MouseMove.如果有更容易的选择,我不愿意走这条路.谁有好的建议?

如果可能的话,我正在寻找一个仅支持WPF的解决方案.

c# wpf xaml mouse-cursor

6
推荐指数
1
解决办法
851
查看次数

Base64编码的字符串可以以3个等号结尾吗?

这篇文章建议(请参阅 Anirudh Ramanathan 的回答)Base64 编码的字符串最多可以包含 3 个相同的字符。在网络的其他地方,我看到它可以是一个或两个等号。从理论上讲,由于我们必须将长度设置为 4 的倍数,因此 Anirudh 的答案似乎是正确的。这些信息哪一条是错误的?

使用蛮力,我尝试寻找一个 Base64 会以 3 个等号结尾的字符串,但没有成功找到任何长度最多为 10,000 个字符的字符串。

或者我在这里错过了显而易见的事情?

c# base64

6
推荐指数
2
解决办法
4080
查看次数

在C#中跨两个文件拆分方法

是否可以在C#中跨两个文件拆分方法?我知道有部分方法,但他们似乎无法做到这一点.

这是场景.我正在使用开源库,需要在一个或多个文件中添加一些自定义.例如,我想在类中添加两个新字段Employee,然后在该类的InitializeFields()方法中初始化它们.由于开源项目不断发展,并且不时发布新版本,我希望将自定义与原始项目分开,以便轻松升级到库的新版本.

我已经将所有必需的类拆分为Orig.csCustom.cs使用partial class语法,并添加了我的自定义字段Custom.cs.现在问题是我无法拆分InitializeFields()方法,因此我的自定义代码进入Custom.cs文件.

请注意,我不能使用继承来解决问题.开源库将包含对Employee类的大量引用,我无法更改所有这些引用.

c# methods partial

5
推荐指数
1
解决办法
402
查看次数

在ItemsControl中避免使用ContentPresenter

有没有一种方法,以避免产生的ContentPresenterItemsControl封装在我的项目?我ItemsControl绑定了一个VM属性,我DataTemplate在我的ItemControl的资源(没有x:Key)中使用了一个来自定义我的集合对象的外观.这一切都很好,但通过Snoop检查显示我的所有集合对象都包含在ContentPresenters中,而不是直接添加到Panel中.这个事实为我创造了一些其他问题.有没有办法避免额外的包装?

这是XAML:

<ItemsControl ItemsSource="{Binding Path=Children}">
  <ItemsControl.Resources>
    <DataTemplate DataType="{x:Type vm:Ellipse}">
      <Ellipse Fill="{Binding Fill}" Stroke="{Binding Stroke}" />
    </DataTemplate>
  </ItemsControl.Resources>
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <Canvas Focusable="true" Margin="10" FocusVisualStyle="{x:Null}" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemContainerStyle>
    <Style>
      <Setter Property="Canvas.Left" Value="{Binding XLoc}" />
      <Setter Property="Canvas.Top" Value="{Binding YLoc}" />
      <Setter Property="Canvas.ZIndex" Value="{Binding ZOrder}" />
    </Style>
  </ItemsControl.ItemContainerStyle>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

wpf xaml datatemplate itemscontrol

5
推荐指数
1
解决办法
1220
查看次数

VSTO加载项是否需要签名?

“签名”页面上有两个选项:

  1. 签署ClickOnce清单
  2. 签署大会

开发VSTO加载项(针对Word 2013)时,是否需要启用它们之一或全部启用?如果我使用MSI安装程序而不是ClickOnce部署外接程序怎么办?我还需要启用以上任何一项吗?

如果我的客户希望在Word的加载项列表中看到其公司名称,又想从授权机构购买证书怎么办?然后,我是否需要启用“签署ClickOnce清单”选项(即使使用MSI安装程序)?

(我使用的是VS2015 Community + .NET 4.5。此加载项将针对Office 2010及更高版本的受众群体)。

.net clickonce vsto code-signing

5
推荐指数
1
解决办法
464
查看次数