编辑:我想这个问题没有说得很清楚。它实际上由 4 个独立的组成:
TextBlock获取其默认颜色,如果客户端应用程序不以编程方式或通过 xaml 提供任何样式? Label得到它的默认颜色? TextBlock获取其默认字体大小和字体系列,如果客户端应用程序不以编程方式或通过 xaml 提供任何样式? Label获取其默认字体大小和字体系列? TextBlock 的颜色/字体大小/字体系列的样式。或 Label ,虽然它们有某种关联。我想我已经知道 #2 的答案了,那就是 Label从 SystemColors.ControlTextBrushKey 获取颜色并通过覆盖 ConrolTextBrushKey像这样:<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Red"/>
Label 的颜色s。经过一番研究,我想我也找到了#1 的答案:A TextBlock从其包含的 Window 继承其前景色,默认情况下会得到它的 Foreground颜色来自 SystemColors.WindowTextBrushKey .通过为 WindowTextBrush 定义颜色,如下所示:<Window.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.WindowTextBrushKey}"
Color="Yellow"/>
</Window.Resources>
TextBlock 的“前景”颜色。 Window里面的s .Label 的样式在 Windows 自带的主题(例如“aero.normalcolor.xaml”)中,可以找到<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
Label 设置颜色.但是没有哪里FontSize属性在样式中指定,我认为这与 SystemFonts 有关.对于 TextBlock ,它看起来更加神秘,因为它在“aero.normalcolor.xaml”中的样式只有 4 行:<Style x:Key="{x:Type TextBlock}"
TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping"
Value="NoWrap"/>
<Setter Property="TextTrimming"
Value="None"/>
</Style>
Label或 TextBlock获取其颜色和字体大小/系列的值,如果应用程序没有设置任何值,WPF 中的那些钩子(Hook)在哪里?TextBlock 的试驾色透SystemColors.ControlTextBrush (假设这是 TextBlock 获取其默认颜色的地方,这似乎是错误的):<Window x:Class="TestFontColor.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<StackPanel.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Red"/>
</StackPanel.Resources>
<Button Content="This is red."/>
<Label Content="This is blue.">
<Label.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Blue"/>
</Label.Resources>
</Label>
<TextBlock Text="TextBlock: This is still black."/>
</StackPanel>
最佳答案
据我所知,在大多数情况下,类像 TextBlock , TextBox和许多其他人采用 TextElement.Foreground 中的文本颜色属性(property)。属性值在整个可视化树中继承,即您可以在根元素上设置它并让大部分文本更改其颜色。例如:
<Grid TextElement.Foreground="Red">
<TextBlock Text="test"/>
</Grid>
TextElement.Foreground到系统颜色之一。FontSize也是如此和 FontFamily .它们是 TextElement 的属性具有附加属性用法的类。他们继承了他们的值(value)观。在可视化树项上设置值后,其所有子项都将获得相同的值。除非他们通过显式属性分配或样式等覆盖它。TextElement.Foreground 的值控制。 , TextElement.FontSize和 TextElement.FontFamily附加在特定视觉元素上的依赖属性。Label明确设置他们的 Foreground来一些刷。碰巧刷子是 SystemColors 之一.但并非所有控件都必须如此。其他( TextBlock 、 TextBox 等)不覆盖属性值,只使用在启动时评估的一些默认设置。同样发生在 FontSize和 FontFamily . 您无需将它们设置在任何地方即可让它们工作 .这就是 WPF 的工作原理。How does a TextBlock get its default color, if the client app doesn't provide any style, either programmatically or through xaml?
TextElement.Foreground 的继承值。附加依赖属性。默认情况下,它是从根视觉元素继承的,而根视觉元素又简单地设置为依赖属性的默认值 ( Brushes.Black )。 See alsoHow does a Label get its default color?
TextElement.Foreground 的值附加依赖属性。由于其默认样式将其设置为 {DynamicResource {x:Static SystemColors.ControlTextBrushKey} ,它会绑定(bind)到系统颜色。How does a TextBlock get its default font size and font family, if the client app doesn't provide any style, either programmatically or through xaml?
FrameworkPropertyMetadata TextElement 中依赖属性注册的构造函数静态构造函数。SystemFonts.MessageFontFamily和 SystemFonts.MessageFontSize包裹内部 SystemParameters.NonClientMetrics依次从 WIN32 native SystemParametersInfo 中检索http://msdn.microsoft.com/en-us/library/ms724947 .因此,WPF 与所有 Windows UI 内容(如主题、字体等)紧密集成。How does a Label get its default font size and font family?
TextBlock 相同. Label源自 ContentControl这反过来又源自 Control . Control class 将自己添加为 TextElement.FontFamily 的所有者和 TextElement.FontSize具有相同默认值的属性。SystemFonts 的值属性(它们是只读的),您不必这样做。要更改整个窗口的字体大小和系列,只需将所需的值分配给 TextElement Window 上的附加属性:<Window TextElement.FontSize="20" TextElement.FontFamily="Century Gothic">
..
</Window>
TextElement.Foreground (和 Background 等等)。
关于wpf - 如何在 WPF 应用程序中设置 TextBlock 和标签的默认颜色、字体系列和字体大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479259/
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此