我正在尝试为 WPF 中的 RichTextBox 实现非常简单的文本格式化功能。它仅由 RichTextBox 上方的一些粗体、斜体等切换按钮组成。请参见下图,但忽略顶部的文本框 - RichTextBox 是底部较大的文本框。

切换所选内容或插入符号位置(对于将要输入的文本)的格式不是问题,因为我正在这样做:
private void BoldButton_Checked(object sender, RoutedEventArgs e)
{
this.SetSelectionBold(true);
}
private void BoldButton_Unchecked(object sender, RoutedEventArgs e)
{
this.SetSelectionBold(false);
}
private void SetSelectionBold(bool isBold)
{
var selection = this.RichText.Selection;
if (selection != null)
{
selection.ApplyPropertyValue(TextElement.FontWeightProperty, isBold ? FontWeights.Bold : FontWeights.Normal);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果用户将插入符号移动到其他位置(例如从粗体文本到普通文本),那么我希望 ToggleButtons 能够反映该状态,其方式与在 Word 中的工作方式大致相同。是否可以检测插入符位置何时发生变化,并采取相应的措施?
ToDictionary()上的 MSDN 文档并没有说明它的实际工作方式。我想知道它是否创建了字典及其元素的副本,或者只是重用了相同的引用和枚举器。
例如,如果我有一个 ConcurrentDictionary c,并且我d通过调用创建了一个 Dictionary c.ToDictionary(...),我是否可以独立地(以线程安全的方式)使用(思考foreach)d线程更新c吗?
事实上,当我这样做时,我得到:
集合被修改;枚举操作可能无法执行。
...当序列化d.
如果我在Visual Studio中运行单元测试:
我想只显示方法名称.我已经看到你可以在App.config中指定一个设置来显示方法名称,但这是基于App.config.
我如何在.NET Core中执行相同的操作,它具有完全不同的配置模型?
当用户忘记密码时,您不应通过电子邮件发送密码.在他的Pluralsight课程" Hack Yourself First:How to on the Cyber-Offense "中,Troy Hunt声称"SMTP上没有隐含的传输层安全性".信息安全堆栈交换的这个答案证实,以明文(包括通过电子邮件)发送或存储密码是一个坏主意.
似乎重置密码的正确方法是不立即重置密码.相反,通过电子邮件向用户发送限时激活链接.这需要用户的人工干预,并且在任何阶段都不通过电子邮件传递密码.
上述信息安全性答案描述了如何实现密码重置机制:
不要重置用户的密码,不管是什么- "复位"密码是用户记住,这意味着他/她必须要么改变它或将它写下来更难-说,在明亮的黄色便利贴的边缘了监控.相反,只需让用户立即选择一个新的 - 这也是他们想要做的事情.
如果用户忘记了密码,请使用存储在数据库中的随机生成的重置令牌向他们发送安全的一次性重置链接.令牌必须是唯一且保密的,因此在数据库中对令牌进行散列并在使用链接时对其进行比较.
基于表单的网站身份验证的权威指南同样描述了实现:
始终在数据库中散列丢失的密码代码/令牌.再次,此代码是密码等效的另一个示例,因此必须进行哈希处理,以防攻击者抓住您的数据库.当请求丢失密码代码时,将明文代码发送到用户的电子邮件地址,然后哈希,将哈希值保存在数据库中 - 然后丢弃原始密码.就像密码或持久登录令牌一样.
但是用户将如何真正知道新密码.是否重置为默认值?它是否更改为随机生成的密码,需要以某种方式与用户进行通信?
在" 首先攻击自己:如何进入网络攻击 "中,激活链接将您带到一个可以输入新密码的表单.
如果你正在处理一个网站,那么你可以进入并与网络应用程序交互并选择你自己的新密码.但是使用类似.NET Web API的东西,您正在与通常应该为您提供数据而非用户界面的控制器上的操作进行交互.你不能只是给他们一个链接,并期望他们用它做点什么.
因此,如果您正在通过Web API处理身份验证,那么允许用户重置密码并将新密码传递给他们的有效且安全的方法是什么?
security authentication passwords reset-password asp.net-web-api
该互锁类提供方便原子操作,如fetch and add和compare and swap.
MSDN说这个类:
为多个线程共享的变量提供原子操作.
我的问题是:为什么称它为" 联锁 "?它应该意味着什么吗?
我正在使用以下两个中文字符串进行测试:
\n\n\xe2\x80\x8e\xe2\x80\x8e\xe4\xb8\xad\xe5\x9c\x8b\xe5\x93\xb2\xe5\xad\xb8\xe6\x9b\xb8\xe9\x9b\xbb\xe5\xad\x90\xe5\x8c\x96\xe8\xa8\x88\xe5\x8a\x83\nRun Code Online (Sandbox Code Playgroud)\n\n...和...
\n\n\xe4\xb8\xad\xe5\x9c\x8b\xe5\x93\xb2\xe5\xad\xb8\xe6\x9b\xb8\xe9\x9b\xbb\xe5\xad\x90\xe5\x8c\x96\xe8\xa8\x88\xe5\x8a\x83\nRun Code Online (Sandbox Code Playgroud)\n\n它们看起来完全相同,但其实不然。在立即窗口中执行了以下测试:
\n\n"\xe2\x80\x8e\xe2\x80\x8e\xe4\xb8\xad\xe5\x9c\x8b\xe5\x93\xb2\xe5\xad\xb8\xe6\x9b\xb8\xe9\x9b\xbb\xe5\xad\x90\xe5\x8c\x96\xe8\xa8\x88\xe5\x8a\x83" == "\xe4\xb8\xad\xe5\x9c\x8b\xe5\x93\xb2\xe5\xad\xb8\xe6\x9b\xb8\xe9\x9b\xbb\xe5\xad\x90\xe5\x8c\x96\xe8\xa8\x88\xe5\x8a\x83"\nfalse\n"\xe2\x80\x8e\xe2\x80\x8e\xe4\xb8\xad\xe5\x9c\x8b\xe5\x93\xb2\xe5\xad\xb8\xe6\x9b\xb8\xe9\x9b\xbb\xe5\xad\x90\xe5\x8c\x96\xe8\xa8\x88\xe5\x8a\x83".Length + " " + "\xe4\xb8\xad\xe5\x9c\x8b\xe5\x93\xb2\xe5\xad\xb8\xe6\x9b\xb8\xe9\x9b\xbb\xe5\xad\x90\xe5\x8c\x96\xe8\xa8\x88\xe5\x8a\x83".Length\n"12 10"\nRun Code Online (Sandbox Code Playgroud)\n\n还:
\n\n"\xe2\x80\x8e\xe2\x80\x8e\xe4\xb8\xad\xe5\x9c\x8b\xe5\x93\xb2\xe5\xad\xb8\xe6\x9b\xb8\xe9\x9b\xbb\xe5\xad\x90\xe5\x8c\x96\xe8\xa8\x88\xe5\x8a\x83"[0]\n8206 \'\xe2\x80\x8e\'\n"\xe4\xb8\xad\xe5\x9c\x8b\xe5\x93\xb2\xe5\xad\xb8\xe6\x9b\xb8\xe9\x9b\xbb\xe5\xad\x90\xe5\x8c\x96\xe8\xa8\x88\xe5\x8a\x83"[0]\n20013 \'\xe4\xb8\xad\'\nRun Code Online (Sandbox Code Playgroud)\n\n我认为这可能与代理对有关,但我不明白为什么会发生这种情况。我发现很奇怪,你可以使用不同的二进制表示法来表示完全相同的中文文本。谁能解释一下这种现象吗?
\n在 WPF 中,如果我想使用 Grid 布局,我需要设置行和列定义...
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- Cell data goes here -->
</Grid>
Run Code Online (Sandbox Code Playgroud)
...然后使用附加Grid.Row和Grid.Column属性定义网格中项目的位置:
<TextBlock Text="Name:" Grid.Row="0" Grid.Column="0" />
<TextBox Text="{Binding Path=Name}" Grid.Row="0" Grid.Column="1" />
<TextBlock Text="Age:" Grid.Row="1" Grid.Column="0" />
<TextBox Text="{Binding Path=Age}" Grid.Row="1" Grid.Column="1" />
Run Code Online (Sandbox Code Playgroud)
这至少会产生我能想到的两个问题:
Grid.Row从第二行开始为所有项目重新分配。这种使用附加属性显式注释网格中每个元素的位置与 HTML 方法形成对比,其中行和单元格按顺序定义:
<table>
<tr><td>Name:</td><td>John</td></tr>
<tr><td>Age:</td><td>15</td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)
在 HTML 中,上面提到的场景很容易解决。您可以通过插入新行...插入它:
<table>
<tr><td>Title:</td><td>Mr.</td></tr> <!-- insert win -->
<tr><td>Name:</td><td>John</td></tr>
<tr><td>Age:</td><td>15</td></tr>
</table> …Run Code Online (Sandbox Code Playgroud) 在Redis INFO页面的示例中,有一个maxmemory_policy设置:
maxmemory_policy:noeviction
Run Code Online (Sandbox Code Playgroud)
似乎没有任何文档。可能的值是什么,默认值是什么?
Akka .NET 文档仅解释如何配置自定义记录器。您首先如何开发自定义记录器?
我正在尝试按照" 安装Ubuntu 14.04,16.04,16.10和Linux Mint 17(64位) "中的说明在Linux Mint 18.1上安装.NET Core .我因依赖关系而收到错误:
我仍然无法直接安装缺少的依赖项:
有什么我可以做的才能使它工作,或Linux Mint 18.1根本不受支持?
Result正如Stephen Cleary关于该主题的文章所示,访问任务的属性有可能阻止任务完成.
我想Result在已完成的任务上访问将永远不会阻止,但我找不到任何确认这一点的来源.是这样吗?
这是我上一个问题的后续内容: C++完全系统崩溃,仅发布模式
基本上我有一个树状数据结构,在Release模式下,它完全冻结了操作系统.这是由于内存分配突然激增,超出了操作系统可以处理的范围.
这看似内存泄漏(它是,但在一分钟内更多)是非常奇怪的,因为我有所有必要的代码来初始化指向NULL并最终分配它们(必要时)如果它们被发现是NULL.在调试模式下,确认了这个正确的行为,并且事情分配正常(我可以看到调试器中的NULL指针设置为零).
但在发布模式中,情况有所不同.构造函数被完全跳过,并且所有类的内部都被初始化为随机垃圾.这会导致指针变得混乱,这就是内存被分配的地方,直到整个系统崩溃.
为什么Release模式忽略了我的构造函数?
我在Windows 7上使用Visual Studio 2010顺便说一句.
c# ×4
.net ×2
.net-core ×2
redis ×2
wpf ×2
akka.net ×1
blocking ×1
c++ ×1
constructor ×1
interlocked ×1
linux ×1
logging ×1
memory ×1
memory-leaks ×1
passwords ×1
persistence ×1
richtextbox ×1
security ×1
string ×1
task ×1
unicode ×1
xunit ×1