WPF TreeView中的所选项目具有深蓝色背景和"尖锐"角.今天看起来有点过时了:
我想改变背景,看起来像在Windows 7的资源管理器中(有/无焦点):
我到目前为止所尝试的并没有删除原始的深蓝色背景,而是在它上面画了一个圆形边框,这样你就可以看到边缘和左边的深蓝色 - 丑陋.
有趣的是,当我的版本没有焦点时,它看起来很不错:
我想不要重新定义控件模板,如此处或此处所示.我想设置所需的最小属性,使所选项目在资源管理器中看起来像.
替代方案:我也很乐意将焦点选中的项目看起来像我现在所做的那样没有焦点.失去焦点时,颜色应从蓝色变为灰色.
这是我的代码:
<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) 例如,在这里阅读了.NET中的强名称后,我有以下问题:
我们有一个Authenticode代码签名证书,我们用它来签署所有EXE,DLL和MSI文件.这样做的好处是,Windows知道MSI来自可靠的来源,并且如果需要,还可以验证每个文件的真实性.
我们目前不使用.NET强名称.我已经读过,强命名文件本质上意味着它使用自签名证书进行数字签名.我对此的看法是,由受信任的证书颁发机构签名的Authenticode证书比自签名证书更有价值,该证书的真实性无论如何都无法验证,因为它们缺少根证书(我们不打算将其分发给最终用户,是我们!?).
问题:如果已使用Authenticode签名,是否还有其他强命名程序集的值?
如果我创建一个概念类图,使每个类捕获'名称'和'属性'而不是'操作',我基本上没有创建那些被认为是ERD的东西吗?我试图了解创建概念类图与创建概念类图之间的差异,而不是将其称为ERD?如果这些仍然是两种不同的动物,有人可以解释一下它们的区别是什么吗?
位于Chrome开发者工具窗口左下角的"漂亮打印"按钮可以使缩小的代码可读.但是,当我点击它时,没有任何反应.我尝试了单击和双击.这种情况发生在Windows上的Chrome 32上.
如何使漂亮的打印按钮工作?
我有一个字符串,其中有几个字段由特定字符分隔,如下所示:
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个字段.出于这个原因,我更喜欢将每个字段值放在自己的命名变量中.
我的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) 我知道编译器生成的函数、三规则和五规则。在现实世界的场景中,确定编译器实际创建了哪些编译器生成的函数(构造函数、赋值运算符、析构函数)可能并非易事。
有没有办法列出特定类的编译器生成的函数?
我主要对 Visual Studio 2019 和 Xcode 感兴趣,但更受欢迎的通用解决方案。
我需要在一个批处理文件中复制多个文件.这些文件具有映射到不同代码页的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) 我是第一次使用WPF树视图,并对它没有做的所有基本事情感到惊讶.其中之一是键盘导航,在任何自尊的树视图中实现,例如在Windows资源管理器或Regedit中.
这是它应该如何工作:
如果树视图具有焦点并且我键入(字母/数字),则选择应移动到当前所选项目下方的第一个可见(也称为展开)项目,该项目与我键入的字符串匹配并将其带入视图.如果在当前项目下方找不到匹配项,则搜索应从顶部继续.如果未找到匹配项,则不应更改所选项目.
只要我继续输入,搜索字符串就会增长并且搜索会被细化.如果我停止输入特定时间(2-5秒),则清空搜索字符串.
我准备从头开始"手工"编程,但由于这是非常基本的,我想当然有人已经做到了这一点.
在尝试使用FileSystemWatcher时,我发现它以某种方式超越了我的用户帐户对文件和文件夹的权限,并且会引发更改事件,其中包含有关您甚至无法访问的文件和文件夹中已更改内容的信息.
我有两个问题:
1)为什么会这样?
2)这是AD配置中的问题吗?我如何解决它 ?
3)有没有办法收集这些文件,甚至创建它们的FileSystemInfo以获取有关文件的更多信息(不仅仅是对它们所做的更改)?
据我所知,只有FileSystemWatcher免受限制,我不能对它运行任何其他东西,这里是我尝试过的列表:
更新:尝试了helge的解决方案,有些类似于他的sugested,不是通过windows的api,而是通过命令提示符:
robocopy/B\myserver\folder c:\ somefolder
最好的命令名称.
你可以通过robocopy来检查/ B代表"备份模式",这就是帮助这种安全性超越的原因.
我会尝试任何东西,我想找出究竟是什么导致FileSystemWatcher能够观看我无权打开的文件夹.知道原因,我想学习如何阻止FileSystemWatcher,以及如何收集找到的文件.
如果我使用我的个人账户,我会进行调查.拜托,有人可以帮帮我吗?我将写一篇关于解决方案的博客文章,其中包括可能有助于未来同样怀疑的任何人.
c# security filesystemwatcher active-directory visual-studio
wpf ×3
.net ×2
c# ×2
security ×2
treeview ×2
assemblies ×1
authenticode ×1
batch-file ×1
c++ ×1
c++11 ×1
er-diagram ×1
filenames ×1
gac ×1
keyboard ×1
navigation ×1
perl ×1
selecteditem ×1
split ×1
string ×1
strongname ×1
styles ×1
uml ×1
unicode ×1
windows ×1
xaml ×1