【问题标题】:WPF: Moving panel resources to dictionary fileWPF:将面板资源移动到字典文件
【发布时间】:2014-01-07 07:20:49
【问题描述】:

我的一个网格目前以以下代码开头:

<Grid x:Name="Top_GRID" Margin="4.953,10" Width="817.28">
   <Grid.Resources>
   <Style TargetType="TextBlock">
      <Setter Property="VerticalAlignment" Value="Center"/>
      <Setter Property="Margin" Value="3"/>
      <Setter Property="Background" Value="Red" />
   </Style>
   <Style TargetType="TextBox">
      <Setter Property="VerticalAlignment" Value="Center"/>
      <Setter Property="Margin" Value="3"/>
   </Style>
   <Style TargetType="Button">
       <Setter Property="VerticalAlignment" Value="Center"/>
       <Setter Property="Margin" Value="3"/>
   </Style>
</Grid.Resources>

澄清一下 - 我想声明一个 Grid,其中所有 TextBlocks 的 Background 属性都设置为“Red”。所有 Button 边距都设置为“3”,依此类推。 我想将资源定义移动到字典文件中。
我应该以某种方式将其包装为 Style 吗? 如果是这样,我将有一个递归样式声明(我认为这是非法的)。
听起来很简单,但我找不到方法。

【问题讨论】:

    标签: wpf resources resourcedictionary


    【解决方案1】:

    试试这个

    <Style x:Key="Grid_ControlStyle" TargetType="Grid">
            <Style.Resources>                
                    <Style TargetType="TextBlock">
                        <Setter Property="VerticalAlignment" Value="Center"/>
                        <Setter Property="Margin" Value="3"/>
                        <Setter Property="Background" Value="Red" />
                    </Style>
                    <Style TargetType="TextBox">
                        <Setter Property="VerticalAlignment" Value="Center"/>
                        <Setter Property="Margin" Value="3"/>
                    </Style>
                    <Style TargetType="Button">
                        <Setter Property="VerticalAlignment" Value="Center"/>
                        <Setter Property="Margin" Value="3"/>
                    </Style>             
            </Style.Resources>
        </Style>
    

    【讨论】:

    • 正是我想要的!发送
    • 感谢您的欣赏!!
    【解决方案2】:

    您需要将按钮、文本框等的所有样式放在 resourceDictionary 文件中。然后在应用资源中添加这个文件:

    <Application x:Class="Aplication.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
            >  
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources\YourResource.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    

    然后在xaml中你就可以像这样使用它了

     <TextBlock Grid.Column="1" Grid.Row="1" Text="bla bla" Style="{DynamicResource YourStyle}"/>
    

    最后你的风格应该是这样的

     <Style x:Key="StyleName" TargetType="{x:Type TextBlock}">
        <Setter Property="Margin" Value="3,3,3,3"/>
        <Setter Property="FontFamily" Value="Arial"/>
        <Setter Property="FontSize" Value="12pt"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
    </Style>
    

    希望这就是你要找的东西。

    【讨论】:

    • 原始代码是为网格元素声明样式:“此网格中的所有文本块都将被设置样式......”。您的解决方案要求我为每个控件设置样式,无论它们在网格中的位置如何。
    • @Shaul 在这里,您有一种样式可以用于应用程序中的所有文本块
    【解决方案3】:

    请仔细阅读 WPF 中资源字典的概念。任何与应用程序外观相关的样式、颜色、字体等,如果您希望在应用程序的多个屏幕中重复出现,都应放在资源字典中。

    x:Key 是可用于在应用程序的任何位置访问样式的属性。 为了使您的资源字典可以通过应用程序访问,请将其放入 app.xaml

    【讨论】:

    • 是的。您可以定义命名样式并在以后使用它们。我想定义一个覆盖网格下元素的 default 样式。这略有不同。
    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多