小编ygo*_*goe的帖子

WPF FixedDocument中的每页方向

使用PrintDialog从WPF打印时,您只能为要打印的所有页面设置默认页面方向.我正在使用FixedDocument并为我自己布局的不同内容创建多个页面,包括页眉和页脚行.其中一些页面必须是风景,其他页面必须是肖像.

如何设置单个页面的方向?FixedPage类不提供这样的属性.

printing wpf orientation

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

如何有效地对 SQL 数据库中的记录进行版本控制

至少在一个应用程序中,我需要在关系数据库中保留旧版本的记录。当应该更新某些内容时,将添加一个新副本,并将旧行标记为非当前行。当应删除某些内容时,应将其标记为非当前或已删除。

有一个简单的用例:记录的新版本只能在当前时间添加,每个版本取代一行。这可用于在保存新数据时存档以前的记录。为此,我会将以下列添加到每个表中:

VersionTime datetime -- Time when this versions becomes effective
IsCurrent bool -- Indicates whether this version is the most current (and not deleted)
Run Code Online (Sandbox Code Playgroud)

如果您只需要知道记录的最新版本是什么,并且只需要单独枚举单个记录的先前版本,那么这很好。时间点查询比第二种变体更痛苦。

一个更通用的变体是这样的:可以在任何指定的有效时间范围内随时添加记录的版本。所以我可以声明一个实体的某些设置在 2013 年底之前有效,它的另一个版本在 2014 年有效,另一个版本将从 2015 年开始有效。这可用于存档旧数据(如上),并提前计划在未来某个时间使用不同的数据(并将此信息保存为存档)。为此,我会将以下列添加到每个表中:

ValidFrom datetime -- Time when this version becomes valid (inclusive)
ValidTo datetime -- Time when this version becomes invalid (exclusive)
Run Code Online (Sandbox Code Playgroud)

第二种方法基本上也可以代表第一种方法,但很难知道哪个版本是最新的 - 因为您还可以为将来添加版本。此外,ValidFrom/ValidTo 设计能够声明重叠范围,并且根据定义,具有最高 ValidFrom 的行应适用于这种情况。

现在我想知道如何实施有效的解决方案来管理和查询此类数据。通常,您可以使用任何类型的 WHERE、GROUP BY 和 JOIN 编写任何 SQL 查询来获取您想要的记录。但是应用版本控制后,您需要考虑每条记录的正确版本。因此,不是连接来自另一个表的记录的每个版本,而是必须添加适当的条件以仅选择在给定时间有效的版本。

一个例子:

SELECT a, b, c
FROM t1
Run Code Online (Sandbox Code Playgroud)

必须改为:

SELECT a, b, c
FROM …
Run Code Online (Sandbox Code Playgroud)

sql database database-design version

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

.NET AES 解密破坏了前几个字节

我在用着AesCryptoServiceProvider来加密和解密磁盘上的 XML 文档。MSDN 参考中有一个很有帮助的示例。我根据给定密码的 SHA-256 哈希生成 AES 密钥。它的前半部分被指定为 IV,因为我不知道这里有什么更好的东西可以使用。据我所知,加密和解密时密钥和IV必须相同。

\n\n

当我解密文件时,它的开头是这样的:

\n\n
I\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdH\xe7\x92\xa7\xef\xbf\xbd-\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd[\xef\xbf\xbd="1.0" encoding="utf-8"?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

该文档的其余部分完全没问题。正如我所期望的那样,内容后面甚至没有一些随机填充。

\n\n

是什么导致文件开头出现这种随机垃圾?

\n\n

以下是更多阅读代码:

\n\n
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())\n{\n    using (SHA256CryptoServiceProvider sha = new SHA256CryptoServiceProvider())\n    {\n        this.cryptoKey = sha.ComputeHash(Encoding.Unicode.GetBytes(password));\n    }\n    aes.Key = this.cryptoKey;\n    Array.Copy(this.cryptoKey, aes.IV, 16);\n\n    ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);\n\n    using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))\n    using (CryptoStream cs = new CryptoStream(fs, decryptor, CryptoStreamMode.Read))\n    using (StreamReader sr = new StreamReader(cs))\n    {\n        string data = sr.ReadToEnd();\n        xdoc.LoadXml(data);\n\n        //xdoc.Load(sr);\n …
Run Code Online (Sandbox Code Playgroud)

c# encryption cryptography

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

CSS 过滤器禁用固定位置

我有一个页面在过滤器被激活之前工作正常。footer元素末尾有一个body,设置fixed在视口的底部。现在我需要创建另一个footer具有相同定位的元素。它包含 a 的按钮form,为了使提交按钮起作用,它们必须位于该form元素内。

当页面上打开模式时(这是执行此操作的代码),背景会变暗并被过滤。但是,一旦该过滤器生效,第二个过滤器footer就不再位于视口的底部,而是位于其他页面内容的底部,可以在任何地方。

这是显示问题的示例。只需注释掉过滤器样式即可查看其外观。不同的颜色和高度仅用于说明目的。在我的应用程序中,所有页脚看起来都一样。事实上,我不再使用 footer2 但需要 footer1始终位于 footer2 所在的位置。

body>* {
  filter: blur(1px);
}

main {
  border: 2px solid #64e315;
}

footer {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 20px;
}

#footer1 {
  background: #dce2f8;
}

#footer2 {
  border: 2px solid #e38e15;
  text-align: center;
}
Run Code Online (Sandbox Code Playgroud)
<main>
  <p>
    Main content
  </p>
  <p style="height: 150px;">
    <!-- Placeholder for fixed footer …
Run Code Online (Sandbox Code Playgroud)

html css layout

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

承诺并修改返回值

我需要修改现有代码以支持同步和异步结果。虽然我可以轻松地使用 C# 处理Taskawait,但即使在阅读了 MDN 和其他页面的大量内容之后,我还是无法理解 JavaScript Promise

现有代码如下所示:

function dispatchCall() {
    // ...

    try {
        let result = fn.apply(context, args);

        if (result !== undefined) {
            return { status: 0, result: result };
        }
        return { status: 0 };
    }
    catch (err) {
        if (typeof err === "object") {
            return { status: 400, errorMessage: err.name + ", " + err.message, stack: err.stack };
        }
        return { status: 400, errorMessage: err };
    }
}
Run Code Online (Sandbox Code Playgroud)

fn是要调用的函数。它是由我的 API …

javascript promise

5
推荐指数
2
解决办法
9720
查看次数

禁用ListView中列的大小调整

我的窗口中有一个ListView,它有很多列.部分或全部列不能由用户调整大小,因为它们已经具有最佳宽度,并且意外调整大小只会使其变得更糟.现在有一些问题的答案可用,但所有这些都最终重新设计控件.不幸的是,我最终得到了许多XAML代码页面,这些代码是高度平台/主题特定的.当我使用Blend创建默认样式的副本时,我会获得许多仅适用于Win7 Aero的渐变等,但不适用于XP主题或其他任何内容.

因此,替换控件的整个样式不是一种选择.(它几乎没有.)

我已经确定了需要隐藏的部分,它被命名为"PART_HeaderGripper".我以前做过这样的事情,使用代码隐藏中的以下代码从ProgressBar中删除正在运行的发光和其他部分:

var glow = progressBar.Template.FindName("PART_GlowRect", progressBar) as FrameworkElement;
if (glow != null) glow.Visibility = visibility;
Run Code Online (Sandbox Code Playgroud)

但这不适用于GridViewColumnHeader,因为Template.FindName没有找到任何内容(返回null).我很确定必须有一种方法可以在运行时修改视觉效果.但我现在无法弄明白.任何的想法?

wpf listview resize

4
推荐指数
1
解决办法
7110
查看次数

在WPF TextBox中禁用覆盖模式(按Insert键时)

当用户在WPF TextBox中按Insert键时,控件在插入和覆盖模式之间切换.通常,这是通过使用不同的光标(线对块)可视化的,但这不是这里的情况.由于用户完全没有办法知道覆盖模式是活动的,我只想完全禁用它.当用户按下Insert键时(或者可能有意或无意地激活该模式),TextBox应该保持插入模式.

我可以添加一些按键事件处理程序并忽略所有这些事件,按下没有修饰符的Insert键.那就够了吗?你知道一个更好的选择吗?我的视图中有很多TextBox控件,我不想在任何地方添加事件处理程序......

wpf textbox overwrite

4
推荐指数
1
解决办法
1520
查看次数

等待任何线程完成,而不是全部

我开始多线程,并想知道什么时候任何的然后完成.我知道以下代码:

foreach (Thread t in threads)
    t.Join();
Run Code Online (Sandbox Code Playgroud)

但它只会等待所有线程在一起.那太晚了.我需要知道一个线程何时完成,即使其他线程仍在运行.我正在寻找相当于WaitAny线程的东西.但是我无法将代码添加到我正在监视的所有线程中,因此使用信号或其他同步对象不是一种选择.

一些澄清:我正在开发一个记录/跟踪工具,它应该记录应用程序的活动.我可以在线程启动时插入日志语句,但是我不能在线程的每个可能的方式上插入日志语句(多个退出点,异常等).所以我想注册新线程,然后在完成写入日志条目时收到通知.我可以Join在每个线程上异步,但这意味着每个受监控线程的第二个线程可能看起来有点开销.线程是通过各种方式使用的,是它BackgroundWorker,Task或池中的线程.从本质上讲,它是一个线程,我想知道它什么时候完成.确切的线程机制由应用程序定义,而不是日志记录解决方案.

c# multithreading synchronization

4
推荐指数
1
解决办法
1695
查看次数

Assembly.GetCustomAttributesData找不到AssemblyVersionAttribute

您可以加载程序集和查询中的所有组件属性,包括AssemblyInformationalVersionAttributeAssemblyVersionAttributeAssemblyFileVersionAttribute。但是,仅使用该Assembly.ReflectionOnlyLoadFrom方法打开程序集进行反射时,仅列出信息版本和文件版本,而不列出AssemblyVersionAttribute

为什么我也没有得到该属性?

正如ILSpy演示的那样,Mono Cecil可以阅读所有内容。但是对于我的特定工具而言,该库太大了。

.net reflection attributes .net-assembly

4
推荐指数
1
解决办法
427
查看次数

使用 XPath 测试当前节点

.NET 的 XPath 函数提供了常用功能,例如SelectSingleNodeSelectNodes。他们只能找到子节点只能查找XPath 查询指定的

但是如果我想测试当前节点是否匹配给定的 XPath 规范怎么办?这是如何运作的?

假设我有一个 HTML 文档,我在其中找到了一个table节点。

<table>
  <tr>
    <td>...</td>
  <tr>
  <tr class="abc">
    <td>...</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我可以tr从那里找到所有元素。一旦我达到了tr元素(我也可以通过导航到达那里,而不是 XPath),我想知道它是否符合某些条件。最好将它们指定为 XPath 字符串。

这就是我正在寻找的:

XmlNode trNode = ...;
bool result = trNode.Matches("tr[@class='abc']");
Run Code Online (Sandbox Code Playgroud)

.NET 的(非常有限的)XPath 功能是否支持此功能?或者,如果这有区别的话,HtmlAgilityPack包?

.net c# xml xpath

3
推荐指数
1
解决办法
1354
查看次数