【问题标题】:How can I define and use a variable in XAML to define a color?如何在 XAML 中定义和使用变量来定义颜色?
【发布时间】:2009-06-24 10:08:34
【问题描述】:

我的 XAML 中有许多元素将 Foreground="#555" 定义为只读文本框中褪色文本的颜色。

<TextBlock Text="{Binding SingularModelClassFileTitle}" Margin="0 10 0 0"/>
<TextBox Text="{Binding SingularModelClassFileName}"
         HorizontalAlignment="Left"
         IsReadOnly="True"
         Foreground="#555"
         Width="500"/>
<TextBox 
 VerticalScrollBarVisibility="Visible"
 AcceptsReturn="True"                  
 Width="500" 
 Height="100" 
 IsReadOnly="True" 
 Foreground="#555"
 Text="{Binding SingularModelClassContent}"
 HorizontalAlignment="Left"
 Margin="0 0 0 20"/>

我如何将此值放入 XAML 变量中并在每个属性中引用它,以便我只需在一个地方更改它?

我想你可以做这样的事情

<sys:String x:Key="ReadOnlyTextColor">#555</sys:String>

...

    <TextBox Foreground="{StaticResource ReadOnlyTextColor}"/>

那么属性xmlns:sys=... 对此的引用是什么?

【问题讨论】:

  • 你问的问题很好,爱德华。在学习 WPF 时,您的名字会一次又一次地弹出 ;-)

标签: wpf xaml


【解决方案1】:

尝试将您的颜色定义为SolidColorBrush

<SolidColorBrush x:Key="ReadOnlyTextBrush" Color="#555555" />

...

<TextBox Foreground="{StaticResource ReadOnlyTextColor}" />

【讨论】:

  • Matt,是不是Color 不能直接用作StaticResource,因为它是值类型,而不是引用类型?
  • @MattDavis Color 无法使用,因为 TextBox 的 Foreground 属性类型为 Brush。您可以创建一个Color 并在SolidColorBrush 中将其引用为StaticResource
【解决方案2】:

有时您可能需要定义颜色而不是画笔:(您希望这样的一种情况是能够使用颜色参数定义渐变) 在这种情况下,您可以像这样定义它们:

 <Color x:Key="ButtonColor1">Blue</Color>
 <Color x:Key="ButtonColor1">#AABBCC</Color>
 <Color x:Key="ButtonColor1" A="0" R="124" G="111" B="44"/>

【讨论】:

  • 遗憾的是,最后一个选项抛出“无法从文本 '00' 创建 'System.Byte'。”在 Windows 手机上。第二个就像一个魅力,干杯!
  • 然后引用颜色使用{StaticResource Blue}
  • @StephenHosking,不,参考颜色使用{StaticResource ButtonColor1}
  • 最后一个应该是A="0"。您在这里使用的是字节,而不是十六进制数字的字符串表示形式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2022-11-16
相关资源
最近更新 更多