代码之家  ›  专栏  ›  技术社区  ›  Spencer Ruport

Silverlight:TargetType=“X:类型textBlock”的属性类型无效

  •  6
  • Spencer Ruport  · 技术社区  · 15 年前

    只是稍微玩弄一下Silverlight,并尝试设置应用于所有文本块的样式。以下XAML:

    <Style TargetType="{x:Type TextBlock}">
       <Setter Property="Margin" Value="10, 10, 10, 10" />
    </Style>
    

    给了我错误 Invalid attribute value {x:Type TextBlock} for property TargetType.

    我从msdn中复制并粘贴了这一点,所以我有点迷茫为什么我会得到这个错误。

    编辑:

    以下是我正在尝试的完整代码:

    <UserControl x:Class="NIRC.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="400" Height="300">
        <UserControl.Resources>
            <Style TargetType="TextBlock">
                <Setter Property="Margin" Value="10" />
                <Setter Property="Foreground" Value="Red" />
            </Style>
        </UserControl.Resources>
        <TextBlock>Hello World!</TextBlock>
    </UserControl>
    

    它的外观如下:

    alt text http://www.netortech.com/Content/slhw.jpg

    6 回复  |  直到 12 年前
        1
  •  6
  •   Gordon Mackie JoanMiro    15 年前

    Silverlight不支持通过通用样式(即,使用TargetType但不使用静态资源键-x:key=)进行隐式样式设置,但WPF支持。

    需要在要使用style=“staticresource设置样式的元素的每个实例上使用staticresource引用显式应用样式。 样式名 }。

    这个 Silverlight toolkit 有一个隐式样式管理器(ISM),它通过包装Silverlight标记和通过解析内容应用来自资源字典的样式来绕过此问题。

        2
  •  4
  •   CZFox    15 年前

    TargetType的值仅更改为TextBlock。它应该起作用。

    <Style TargetType="TextBlock">
       <Setter Property="Margin" Value="10, 10, 10, 10" />
    </Style>
    

    或者,给它x:key和这个属性的值在文本块中用作staticresource。

    <Style x:Key="someStyleName" TargetType="TextBlock">
       <Setter Property="Margin" Value="10, 10, 10, 10" />
    </Style>
    ...
    <TextBlock x:Name="myTextBlock" Text="Silverlight" Style="{StaticResource someStyleName}"/> 
    
        3
  •  4
  •   Denis Dollfus    14 年前

    因为您要做的是隐式样式,所以到目前为止,Gordon的回答似乎是正确的:“Silverlight不支持通过通用样式(即,使用TargetType但不使用静态资源键-x:key=”)进行隐式样式,但WPF支持。”

    但是隐式样式 将与Silverlight 4一起使用 . 见 http://www.silverlightshow.net/items/Implicit-Styles-in-Silverlight-4.aspx

        4
  •  2
  •   Quintin Robinson    15 年前

    hmm,以下内容应该工作并级联到usercontrol元素中的所有文本块。

    <UserControl>
        <UserControl.Resources>
            <Style TargetType="TextBlock">
                <Setter Property="Margin" Value="10" />
            </Style>
        </UserControl.Resources>
        <TextBlock Text="This has a margin of 10 on all sides!" />
    </UserControl>
    

    编辑:
    NIRC.Page 用户控件的正确代码隐藏?

    我希望我知道出了什么问题,下面的内容在用户控件中非常适合我。

    <UserControl x:Class="..."
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="300" Width="300">
        <UserControl.Resources>
            <Style TargetType="TextBlock">
                <Setter Property="Margin" Value="10" />
                <Setter Property="Foreground" Value="Red" />
            </Style>
        </UserControl.Resources>
        <TextBlock>Hello World!</TextBlock>
    </UserControl>
    

    结果是红色文本,各边的边距为10px。

        5
  •  2
  •   TrueHarlequin    13 年前

    是的,Silverlight4现在让你做隐式风格,你只需要做昆顿所说的,只需设置没有键的TargetType,你就可以走了。把它放到app.xaml中,它应该将样式应用到应用程序中的所有控件。

        6
  •  0
  •   Uwe Keim Chand    12 年前

    如果你不想 Style 每次使用控件时,都可以在构造函数代码中进行设置:

    Style = (Style)Application.Current.Resources["YourStyle"];