【问题标题】:Resource Dictionary WPF资源字典 WPF
【发布时间】:2012-11-25 19:34:47
【问题描述】:

我的 WPF 应用程序中有一个资源字典,其中包含各种控件的样式信息。

它可以像我们在 HTML 中的 CSS 中那样使用吗?例如

 p
 {
   margin:20px;
   font:Tahoma;
  }

这适用于 HTML 中的所有“p”标签。我们不必在 HTML 中为“p”标签特别提及。

相同的方法是否适用于 WPF,或者我们必须专门 提一下风格

<TextBlock Text="Test" Style="{DynamicResource SomeTextblockStyle}" />

在 XAML 中

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    您当然可以为每种类型设置默认样式。您可以在您的 Generic.xaml 中执行此操作,请注意我没有提供密钥。

    <Style TargetType="{x:Type Button}">
         <Setter Property="Height" Value="25"/>
         <Setter Property="Foreground" Value="White"/>
    </Style>
    

    这将在您的应用程序中设置Button 的每个实例的样式。

    如果您转到 XAML 文件并定义 Button 的实例,覆盖 Foreground 值,则该本地实例将优先于全局样式。

    <Button Foreground="Black"/>
    

    【讨论】:

    • 嗨 Aaron,感谢您的回复,它有效,但是如果我将样式应用于文本块,它将改变包括菜单项在内的所有内容。有什么解决办法吗?
    • 一切都与等级制度有关,索尼。您可能需要设置下一级嵌入对象的样式以“重置”事物。如果您设置表单的前景色,则从其父对象继承该属性的 TextBlock 将使用该表单的前景色。
    • @sony 正如 djdanlib 所提到的,这都与层次结构有关。最接近实现的一方获胜。如果您将本地样式应用于具有全局样式的 TextBlock 并且您希望全局样式保持不变,则不会发生这种情况。这将违背优先权的自然流动。
    【解决方案2】:

    您可以像使用键一样设置样式

    <Style TargetType="{x:Type TextBlock}" x:Key="myStyle">
       <Setter Property="Margin" Value="20"/>
       <Setter Property="FontFamily" Value="Tahoma"/>
    </Style>
    

    在 Window.Xaml 中

    <TextBlock Text="Hello" Style="{DynamicResource myStyle}"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多