When I click on an element in Visual Studio's XAML designer, VS adds a faint highlight to the corresponding XAML statement in the XAML text editor (as seen for StackPanel below). What's this highlight called in Visual Studio's Fonts and Colors customization settings? I want to change it but it's hiding itself well.
我将 MVVM 用于 WPF 客户端,它代表一个模型并允许用户与其交互。我总是避免在实际模型中使用 ObservableCollection 类(而是选择模型中的 IList 等通用集合,然后在底层集合发生更改时将该 IList 转换为 ViewModel 上的实际数据绑定 ObservableCollection)。原因是 MSDN 将此类呈现为 WPF 和以 UI 为中心:
您可以枚举任何实现 IEnumerable 接口的集合。但是,要设置动态绑定以便集合中的插入或删除操作自动更新 UI,集合必须实现 INotifyCollectionChanged 接口。此接口公开 CollectionChanged 事件,只要底层集合发生更改,就应引发该事件。WPF 提供了 ObservableCollection 类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。
问:我的区分实际上有必要吗?这是额外的工作和额外的代码。我知道这个话题对于 SO 来说可能过于模糊和主观,但也许有每个人都遵循的明确的、普遍同意的约定。
在C#中,我有一个需要转换为双重转义的文件名(因为我将此字符串提供给正则表达式).
换句话说,如果我有:
FileInfo file = new FileInfo(@"c:\windows\foo.txt");
string fileName = file.FullName;
Run Code Online (Sandbox Code Playgroud)
fileName 是: c:\\\\windows\\\\foo.txt
但我需要将其转换为在fileName中包含两个文字反斜杠\\的序列.fileName需要是@"c:\\\\windows\\\\foo.txt",或"c:\\\\\\\\windows\\\\\\\\foo.txt".有一种简单的方法可以进行此转换吗?
我想将文件c:\ a1\b2\c3\foo.txt复制到d:\ a1\b2\c3\foo.txt.子驱动器在D驱动器上不存在,如果我尝试直接执行CopyTo(),我将获得IO异常.我无法找到任何内置的c#函数来完成创建缺少目录的脏工作.所以我写了这个:
FileInfo file = new FileInfo(@"c:\a1\b2\c3\foo.txt");
DirectoryInfo destDir = new DirectoryInfo(file.DirectoryName.Replace("c:", "d:");
if (!destDir.Exists) // false
CreateDirectory(destDir, null);
file.CopyTo(file.FullName.Replace("c:", "d:"), true);
private void CreateDirectory(DirectoryInfo endDir, Stack<DirectoryInfo> trail)
{
if (trail == null)
{
trail = new Stack<DirectoryInfo>();
trail.Push(endDir);
}
// remove last directory - c:\a1\b2\c3, c:\a1\b2, c:\a1
Match theMatch = Regex.Match(endDir.FullName, @".*(?=\\\w*\Z)");
DirectoryInfo checkDir = new DirectoryInfo(theMatch.ToString());
if (!checkDir.Exists)
{
trail.Push(checkDir);
CreateDirectory(checkDir, trail);
}
else
foreach (DirectoryInfo dir in trail)
Directory.CreateDirectory(dir.FullName);
}
Run Code Online (Sandbox Code Playgroud)
这非常复杂,正如他们喜欢在深夜的商业广告中说的那样,"必须有更好的方法!"
问题:如何使上述功能移动高效?我是否错过了一个内置方法,已经完成了我正在做的所有事情?
我使用内置的 .NET 功能 (XmlSerializer.Deserialize) 将 XML 文件序列化为对象。设置对象的字段后,我想通过调用对象构造函数中的附加代码来处理该数据。不幸的是,单步执行代码会发现在执行序列化逻辑之前首先执行“附加”代码。这使得该方法不可行,因为尚未初始化字段并且没有数据可操作。
这个问题有已知的解决方案吗?到目前为止,我一直调用第二种方法来初始化数据,但它很笨拙且容易出错:必须在每次序列化后调用它(其他程序员可能不知道这一点),否则我必须创建另一个包装器来加载对象(然后东西开始螺旋上升)。
我有一个基类,我的项目中的所有可绘制元素都使用它.它拥有一个Rectangle,它需要暴露给所有子类,因为它需要在各种情况下作为参数传入.超级直截了当:
public abstract class DrawableSurface
{
protected Rectangle m_Rect;
public Vector2 Position
{
get { return m_Rect.Location; }
set { m_Rect.Location = value; }
}
etc. ...
Run Code Online (Sandbox Code Playgroud)
Rectangle的区域,位置等通常与类的区域和位置同义,但我想强制执行所有客户端(子类的子类)必须通过类的属性与Rectangle交互的约定.换句话说,我有一个客户端可以访问的受保护类,以便它们可以将它传递给函数,但我从不希望它们执行任何直接的m_Rect.Whatever访问.
是否有一种强制执行此约定的好方法(除了文档?)
我正在使用带有 aFloater和 a的传统 FlowDocument 设置Run来环绕图像。我得到了一个我不明白的领先空白。有人可以帮忙吗?(在有人建议删除Run: 我想在这里使用实际的 Run 元素之前,因为我有文本通过数据绑定进入的情况)。
<FlowDocumentScrollViewer VerticalScrollBarVisibility="Auto">
<FlowDocument PagePadding="5" TextAlignment="Left">
<Paragraph FontFamily="Segoe UI" FontSize="12">
<Floater Width="32" HorizontalAlignment="Left" Margin="0,0,2,2" Padding="0">
<BlockUIContainer>
<Image Width="28" Height="28" Source="../imgscr/BassClef_32x.png" />
</BlockUIContainer>
</Floater>
<Run Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin et ante erat. Duis ut scelerisque nisl. Maecenas rutrum sapien vel dolor imperdiet egestas. Duis vel purus at leo hendrerit venenatis. Aenean nibh dui, ornare eu consequat nec, dapibus vel mauris. In bibendum urna …Run Code Online (Sandbox Code Playgroud) c# ×5
wpf ×2
xaml ×2
.net ×1
color-scheme ×1
constructor ×1
directory ×1
editor ×1
field ×1
flowdocument ×1
mvvm ×1
properties ×1
recursion ×1
string ×1
whitespace ×1
xml ×1