Silverlight: недопустимый тип атрибута для TargetType = "{x: Type TextBlock}" - PullRequest
6 голосов
/ 20 марта 2009

Просто немного поиграйтесь с 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, поэтому я немного растерян, почему я получаю эту ошибку.

EDIT:

Вот полный код, который я сейчас пытаюсь:

<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>

Вот как это выглядит:

альтернативный текст http://www.netortech.com/Content/slhw.jpg

Ответы [ 6 ]

6 голосов
/ 24 марта 2009

Silverlight не поддерживает неявное оформление с помощью универсальных стилей (то есть с TargetType, но без статического ключа ресурса - x: Key = ""), но WPF поддерживает.

Вам необходимо явно применять стили, используя ссылки StaticResource, на каждый экземпляр вашего элемента, стиль которого вы хотите использовать, используя Style = "{StaticResource имя_стилла }".

Инструментарий Silverlight имеет Диспетчер неявных стилей (ISM), который обходит это, оборачивая разметку Silverlight и применяя стили из ResourceDictionaries путем анализа содержимого.

4 голосов
/ 10 января 2010

Поскольку то, что вы пытаетесь сделать, это неявное моделирование, то пока Гордон кажется правильным: «Silverlight не поддерживает неявное моделирование с помощью универсальных стилей (то есть с TargetType, но без статического ключа ресурса - x: Key =» ") но WPF делает."

Однако неявные стили будут работать с Silverlight 4 . Смотри http://www.silverlightshow.net/items/Implicit-Styles-in-Silverlight-4.aspx

4 голосов
/ 20 марта 2009

Значение TargetType меняется только на TextBlock. Это должно работать.

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

При желании укажите x: Key и значение этого атрибута используйте в вашем TextBlock как 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}"/> 
2 голосов
/ 25 февраля 2011

Да, Silverlight 4 теперь позволяет вам создавать неявные стили, вам просто нужно сделать то, что говорит Куинтон, и просто установить TargetType без ключа, и все готово. Поместите его в файл App.xaml, и он должен распространить стиль на все элементы управления в приложении.

2 голосов
/ 20 марта 2009

Хм, следующее должно работать и каскадно ко всем текстовым блокам в элементе 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>

Edit:
Является ли 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>

Результат - красный текст с полями 10 пикселей со всех сторон.

0 голосов
/ 17 июля 2012

Если вы не хотите устанавливать Style каждый раз, когда используете свой элемент управления, вы можете установить его в своем коде конструктора:

Style = (Style)Application.Current.Resources["YourStyle"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...