小编Hel*_*ein的帖子

WPF TreeView:如何设置带有圆角的选定项目,如在资源管理器中

WPF TreeView中的所选项目具有深蓝色背景和"尖锐"角.今天看起来有点过时了:

WPF选择具有或不具有焦点的TreeViewItem

我想改变背景,看起来像在Windows 7的资源管理器中(有/无焦点):

Explorer TreeViewItem已选中 选择没有焦点的Explorer TreeViewItem

我到目前为止所尝试的并没有删除原始的深蓝色背景,而是在它上面画了一个圆形边框,这样你就可以看到边缘和左边的深蓝色 - 丑陋.

在此输入图像描述

有趣的是,当我的版本没有焦点时,它看起来很不错:

在此输入图像描述

我想不要重新定义控件模板,如此处或此处所示.我想设置所需的最小属性,使所选项目在资源管理器中看起来像.

替代方案:我也很乐意将焦点选中的项目看起来像我现在所做的那样没有焦点.失去焦点时,颜色应从蓝色变为灰色.

这是我的代码:

<TreeView 
    x:Name="TreeView"
    ItemsSource="{Binding TopLevelNodes}" 
    VirtualizingStackPanel.IsVirtualizing="True"
    VirtualizingStackPanel.VirtualizationMode="Recycling">

    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />

            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="BorderBrush" Value="#FF7DA2CE" />
                    <Setter Property="Background" Value="#FFCCE2FC" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TreeView.ItemContainerStyle>

    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type viewmodels:ObjectBaseViewModel}" ItemsSource="{Binding Children}">
            <Border Name="ItemBorder" CornerRadius="2" Background="{Binding Background, RelativeSource={RelativeSource AncestorType=TreeViewItem}}"
                      BorderBrush="{Binding BorderBrush, RelativeSource={RelativeSource AncestorType=TreeViewItem}}" BorderThickness="1">
                <StackPanel Orientation="Horizontal" Margin="2">
                    <Image Name="icon" Source="/ExplorerTreeView/Images/folder.png"/>
                    <TextBlock Text="{Binding Name}"/> …
Run Code Online (Sandbox Code Playgroud)

wpf treeview xaml styles selecteditem

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

.NET:强命名与Authenticode

例如,在这里阅读了.NET中的强名称后,我有以下问题:

我们有一个Authenticode代码签名证书,我们用它来签署所有EXE,DLL和MSI文件.这样做的好处是,Windows知道MSI来自可靠的来源,并且如果需要,还可以验证每个文件的真实性.

我们目前不使用.NET强名称.我已经读过,强命名文件本质上意味着它使用自签名证书进行数字签名.我对此的看法是,由受信任的证书颁发机构签名的Authenticode证书比自签名证书更有价值,该证书的真实性无论如何都无法验证,因为它们缺少根证书(我们不打算将其分发给最终用户,是我们!?).

问题:如果已使用Authenticode签名,是否还有其他强命名程序集的值?

.net security strongname assemblies authenticode

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

概念UML类图和ERD之间的差异?

如果我创建一个概念类图,使每个类捕获'名称'和'属性'而不是'操作',我基本上没有创建那些被认为是ERD的东西吗?我试图了解创建概念类图与创建概念类图之间的差异,而不是将其称为ERD?如果这些仍然是两种不同的动物,有人可以解释一下它们的区别是什么吗?

uml class-diagram er-diagram

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

Chrome开发者工具/调试器:"漂亮的打印"不起作用

位于Chrome开发者工具窗口左下角的"漂亮打印"按钮可以使缩小的代码可读.但是,当我点击它时,没有任何反应.我尝试了单击和双击.这种情况发生在Windows上的Chrome 32上.

如何使漂亮的打印按钮工作?

google-chrome developer-tools

16
推荐指数
2
解决办法
9968
查看次数

C#:拆分字符串并将结果分配给多个字符串变量

我有一个字符串,其中有几个字段由特定字符分隔,如下所示:

A,B,C

我想在逗号中拆分字符串,并将每个结果字段分配给它自己的字符串变量.在Perl中我可以像这样优雅地做到这一点:

my ($varA, $varB, $varC) = split (/,/, $string);
Run Code Online (Sandbox Code Playgroud)

在C#中实现相同结果的最简单,最优雅的方法是什么?

我知道我可以分成一个数组:

string[] results = string.Split(',');
Run Code Online (Sandbox Code Playgroud)

但是我必须通过他们的索引访问字段,例如结果[2].这很难阅读并且容易出错 - 考虑没有3个30个字段.出于这个原因,我更喜欢将每个字段值放在自己的命名变量中.

c# string perl split

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

使用PresentationFramework.Aero时,是否需要将"Copy Local"设置为true(并将其包含在我的安装项目中)?

我的WPF项目使用.NET 4客户端配置文件.当我添加

<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
Run Code Online (Sandbox Code Playgroud)

<Application.Resources>在调试模式下启动程序,当我得到这个异常(在释放模式程序崩溃默默)

PresentationFramework.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常

附加信息:'Set property'System.Windows.ResourceDictionary.Source'引发了一个异常.行号'14'和行位置'14'.

当我将PresentationFramework.Aero的属性"Copy Local"设置为true时,一切正常,异常就消失了.

"Copy Local"会在我的输出目录中放置PresentationFramework.Aero的副本,因此我需要将它包含在我的安装项目中.为什么这有必要?根据MSDN PresentationFramework.aero包含在.NET framework 4.0客户端配置文件中,因此也包含在GAC中.我觉得在我的应用程序中部署框架文件感觉不舒服.

UDATE:

正如Hans Passant建议我验证目录PresentationFramework.Aero存在于C:\windows\microsoft.net\assembly\gac_msil.然后我使用fuslogvw.exe生成以下日志,在启动我的应用程序"SetACL Studio.exe"时创建,而ApplicationFramework.Aero.dll不在应用程序目录中.有趣的是,加载器甚至没有检查GAC.为什么?

*** Assembly Binder Log Entry  (18.11.2011 @ 17:13:27) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable  D:\Daten\Helge\Programmierung\SetACL Studio\Source\Bin\Debug\SetACL Studio.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = HKT520\Helge
LOG: …
Run Code Online (Sandbox Code Playgroud)

.net wpf gac

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

如何找出编译器生成了哪些函数?

我知道编译器生成的函数、三规则和五规则。在现实世界的场景中,确定编译器实际创建了哪些编译器生成的函数(构造函数、赋值运算符、析构函数)可能并非易事。

有没有办法列出特定类的编译器生成的函数?

我主要对 Visual Studio 2019 和 Xcode 感兴趣,但更受欢迎的通用解决方案。

c++ c++11

11
推荐指数
2
解决办法
444
查看次数

Windows批处理:(robo)复制命令的Unicode参数

我需要在一个批处理文件中复制多个文件.这些文件具有映射到不同代码页的Unicode名称.

例:

set ArabicFile=???????
set CyrillicFile=??????
set GermanFile=Bücher

copy %ArabicFile% SomePlaceElse
copy %CyrillicFile% SomePlaceElse
copy %GermanFile% SomePlaceElse
Run Code Online (Sandbox Code Playgroud)

问题:批处理文件不能是Unicode.

问题:如何将Unicode文件名写入批处理文件,以便复制命令识别它们?

笔记:

我不在乎如何显示文件名.
实际上批处理文件不仅仅是复制这些文件,我只是简化了描述以使问题更加清晰.

正确的批处理文件:

通过Arnout的回答,我修改了我的批处理文件,如下所示.它现在可以正常工作而不需要更改字体(这会很麻烦,正如Arnout评论的那样).

@echo off

chcp 65001

set ArabicFolder=???????
set CyrillicFolder=??????
set GermanFolder=Bücher

robocopy /e d:\temp\test\%ArabicFolder% d:\temp\test2\%ArabicFolder% /log:copy.log
robocopy /e d:\temp\test\%CyrillicFolder% d:\temp\test2\%CyrillicFolder% /log+:copy.log
robocopy /e d:\temp\test\%GermanFolder% d:\temp\test2\%GermanFolder% /log+:copy.log
Run Code Online (Sandbox Code Playgroud)

windows unicode filenames batch-file

9
推荐指数
1
解决办法
2万
查看次数

WPF treeview:如何在资源管理器中实现键盘导航?

我是第一次使用WPF树视图,并对它没有做的所有基本事情感到惊讶.其中之一是键盘导航,在任何自尊的树视图中实现,例如在Windows资源管理器或Regedit中.

这是它应该如何工作:

如果树视图具有焦点并且我键入(字母/数字),则选择应移动到当前所选项目下方的第一个可见(也称为展开)项目,该项目与我键入的字符串匹配并将其带入视图.如果在当前项目下方找不到匹配项,则搜索应从顶部继续.如果未找到匹配项,则不应更改所选项目.

只要我继续输入,搜索字符串就会增长并且搜索会被细化.如果我停止输入特定时间(2-5秒),则清空搜索字符串.

我准备从头开始"手工"编程,但由于这是非常基本的,我想当然有人已经做到了这一点.

navigation keyboard wpf treeview

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

FileSystemWatcher超越了文件系统权限

在尝试使用FileSystemWatcher时,我发现它以某种方式超越了我的用户帐户对文件和文件夹的权限,并且会引发更改事件,其中包含有关您甚至无法访问的文件和文件夹中已更改内容的信息.

我有两个问题:

1)为什么会这样?
2)这是AD配置中的问题吗?我如何解决它 ?
3)有没有办法收集这些文件,甚至创建它们的FileSystemInfo以获取有关文件的更多信息(不仅仅是对它们所做的更改)?

据我所知,只有FileSystemWatcher免受限制,我不能对它运行任何其他东西,这里是我尝试过的列表:

  • 文件已存在
  • Directory.Exists
  • 找到的文件上的FileInfo实例
  • 找到的文件上的DirectoryInfo实例
  • File.Copy
  • File.Delete

更新:尝试了helge的解决方案,有些类似于他的sugested,不是通过windows的api,而是通过命令提示符:

robocopy/B\myserver\folder c:\ somefolder

最好的命令名称.

你可以通过robocopy来检查/ B代表"备份模式",这就是帮助这种安全性超越的原因.

我会尝试任何东西,我想找出究竟是什么导致FileSystemWatcher能够观看我无权打开的文件夹.知道原因,我想学习如何阻止FileSystemWatcher,以及如何收集找到的文件.

如果我使用我的个人账户,我会进行调查.拜托,有人可以帮帮我吗?我将写一篇关于解决方案的博客文章,其中包括可能有助于未来同样怀疑的任何人.

c# security filesystemwatcher active-directory visual-studio

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