我需要这样的东西:
(我需要TreeView和ListView方面.也就是说,Hirearchy和Columns.)
但是,我需要它在WPF中.这是内置的东西,还是我必须自己构建它?
我认为它必须在框架中的某个地方,因为VS2010是在WPF中构建的.
编辑:我已经设法使用TreeView获取了一些我想要的功能,并且一些网格的Columns绑定到Parent网格的列,但功能中有太多的怪癖.
编辑2:我仍然没有找到办法做到这一点.有任何想法吗?
问题标题基本上是我想问的问题:
[MarshalAs(UnmanagedType.LPStr)] - 这如何将utf-8字符串转换为char*?
当我尝试在c#和c ++ dll之间进行通信时,我使用上面的行; 更具体地说,介于:
somefunction(char *string) [c++ dll]
somefunction([MarshalAs(UnmanagedType.LPStr) string text) [c#]
Run Code Online (Sandbox Code Playgroud)
当我通过c#发送我的utf-8文本(scintilla.Text)并进入我的c ++ dll时,我在VS 10调试器中显示:
c#字符串已成功转换为 char*
结果char*在观察窗口中正确反映了相应的utf-8字符(包括韩语中的位).
这是一个截图(更多细节):

如您所见,initialScriptText[0]返回单个byte(char):'B',并char* initialScriptText在VS监视窗口中正确显示内容 (包括朝鲜语).
通过char指针,似乎英语被保存为byte每个char,而韩语似乎被保存为每个两个字节char.(截图中的韩文单词是3个字母,因此保存为6个字节)
这似乎表明每个"字母"不会保存在相同大小的容器中,但会因语言而异.(可能提示类型?)
我试图在纯c ++中实现相同的结果:读取utf-8文件并将结果保存为char*.
这是我尝试读取utf-8文件并转换为char*c ++ 的示例:

意见:
wchar_t*到视觉时的视觉损失char*wchar_t*成功将utf-8文件内容转换为char*char*.(截图还显示了我使用wcstombs的可怕失败)
注意:我正在使用(http://utfcpp.sourceforge.net/)的utf8标题
如果我的代码/观察中有任何错误,请纠正我.
我希望能够模仿我通过c#marshal获得的结果,并且在经历了所有这些之后我意识到我完全陷入困境.有任何想法吗?
在我的WPF应用程序中,我有一种节点图.我已经ContextMenu向这些节点添加了一个,当我右键单击东西时出现,等等.
上下文菜单中的命令来自Service(Microsoft.Practices.ServiceLocation.ServiceLocator)DelegateCommands,并且更新了这些命令RaiseCanExecuteChanged().右键单击的节点将传递给此命令服务,该服务CanExecute在命令的各种方法中使用.
节点都具有在这些条件下使用的一些属性,例如是否可以重命名或删除等.
private void ContextMenu_ContextMenuOpening(object sender, RoutedEventArgs e) {
ServiceLocator.Current.GetInstance<IMenuCommandService>().ReloadICommandConditions();
}
Run Code Online (Sandbox Code Playgroud)
在IMenuCommandService中:
public void ReloadICommandConditions() {
((DelegateCommand<Node>) MyCommand).RaiseCanExecuteChanged();
}
Run Code Online (Sandbox Code Playgroud)
我的ContextMenu(在DataTrigger&内Setter):
<ContextMenu>
<MenuItem Header="Rename"
Command="{Binding MenuCommandService.Rename}"
CommandParameter="{Binding Node}" />
<MenuItem Header="Delete"
Command="{Binding MenuCommandService.Delete}"
CommandParameter="{Binding Node}" />
...
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我右键单击其中一个节点时,显示的上下文菜单看起来像是为所选的上一个节点配置的.就像我右键单击可删除节点然后右键单击不可删除节点一样,上下文菜单中的"删除"命令仍然可以单击.(如果我然后右键单击不可删除的节点,则上下文菜单将是正确的,并且"删除"命令将显示为灰色.)
所以看起来有一些延迟,从之后所做的更改RaiseCanExecuteChanged()实际上是为了"拾取"上下文菜单.我可以做粗修复和只显示文本菜单,他们已被更新后(即他们的CanExecute方法被调用),但我想,以保持两个部分相对独立的.
有什么明显的东西我不见了,我是以错误的方式解决这个问题,还是有人有任何其他建议?
谢谢
我有一个可能会或可能不会看起来像的数组,[0, 1]我想测试它.
此代码(在方法内)有效:
sub some_other_method {
my $self = shift;
...
if (scalar @myArray == 2 && @myArray[0] == 0 && @myArray[1] == 1) {
# this will successfully catch arrays that look like [0, 1]
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将内容移动if到一个单独的方法,然后调用它,它不起作用.
sub is_warning {
my $self = shift;
my @array = shift;
return scalar @array == 2 && @array[0] == 0 && @array[1] == 1;
}
...
sub some_other_method {
my $self = shift;
...
if ($self->is_warning(@myArray)) { …Run Code Online (Sandbox Code Playgroud) c# ×2
wpf ×2
c++ ×1
contextmenu ×1
controls ×1
marshalling ×1
mvvm ×1
perl ×1
prism ×1
treelistview ×1