小编Pyr*_*tie的帖子

WPF:是否有内置的TreeGrid/TreeListView?

我需要这样的东西:

替代文字

(我需要TreeView和ListView方面.也就是说,Hirearchy和Columns.)

但是,我需要它在WPF中.这是内置的东西,还是我必须自己构建它?

我认为它必须在框架中的某个地方,因为VS2010是在WPF中构建的.

编辑:我已经设法使用TreeView获取了一些我想要的功能,并且一些网格的Columns绑定到Parent网格的列,但功能中有太多的怪癖.

编辑2:我仍然没有找到办法做到这一点.有任何想法吗?

wpf controls treelistview

26
推荐指数
3
解决办法
2万
查看次数

MarshalAs(UnmanagedType.LPStr) - 如何将utf-8字符串转换为char*

问题标题基本上是我想问的问题:

[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调试器中显示:

  1. c#字符串已成功转换为 char*

  2. 结果char*在观察窗口中正确反映了相应的utf-8字符(包括韩语中的位).

这是一个截图(更多细节):

SS

如您所见,initialScriptText[0]返回单个byte(char):'B',并char* initialScriptText在VS监视窗口中正确显示内容 (包括朝鲜语).

通过char指针,似乎英语被保存为byte每个char,而韩语似乎被保存为每个两个字节char.(截图中的韩文单词是3个字母,因此保存为6个字节)

这似乎表明每个"字母"不会保存在相同大小的容器中,但会因语言而异.(可能提示类型?)

我试图在纯c ++中实现相同的结果:读取utf-8文件并将结果保存为char*.

这是我尝试读取utf-8文件并转换为char*c ++ 的示例:

SS2

意见:

  1. 从转换wchar_t*到视觉时的视觉损失char*
  2. 既然结果,s8正确显示字符串,我知道我已wchar_t*成功将utf-8文件内容转换为char*
  3. 因为'result'保留了我直接从文件中获取的字节,但是我得到的结果与我通过c#获得的结果不同(我使用了相同的文件),我得出的结论是c#marshal已经把文件内容通过一些其他程序进一步改变文本char*.

(截图还显示了我使用wcstombs的可怕失败)

注意:我正在使用(http://utfcpp.sourceforge.net/)的utf8标题

如果我的代码/观察中有任何错误,请纠正我.

我希望能够模仿我通过c#marshal获得的结果,并且在经历了所有这些之后我意识到我完全陷入困境.有任何想法吗?

c# c++ marshalling

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

使用ContextMenu进行RaiseCanExecuteChanged延迟

在我的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方法被调用),但我想,以保持两个部分相对独立的.

有什么明显的东西我不见了,我是以错误的方式解决这个问题,还是有人有任何其他建议?

谢谢

c# wpf prism contextmenu mvvm

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

移动到单独的函数时,Perl行不起作用

我有一个可能会或可能不会看起来像的数组,[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)

perl

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

标签 统计

c# ×2

wpf ×2

c++ ×1

contextmenu ×1

controls ×1

marshalling ×1

mvvm ×1

perl ×1

prism ×1

treelistview ×1