Silverlight: Почему этот стиль не работает? - PullRequest
3 голосов
/ 11 декабря 2010

Я использую Silverlight 4. У меня есть кнопка:

        <Button Click="addTopicButton_Click">
            <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" />
        </Button>

выглядит хорошо. Однако, когда я пытаюсь установить Content, используя Style, содержимое не появляется:

    <Style x:Name="AddButton" TargetType="Button">
        <Setter Property="Content">
            <Setter.Value>
                <Image Source="/PlumPudding;component/Images/appbar.add.rest.png" />
            </Setter.Value>
        </Setter>
    </Style>

    <Button Click="addTopicButton_Click" Style="{StaticResource AddButton}" />

Кнопка пуста. Почему это?

Ответы [ 3 ]

5 голосов
/ 12 декабря 2010

Не стоит включать элементы UIE, такие как Image, в стиль.Такой объект создается только один раз, когда стиль собирается во время синтаксического анализа Xaml.В UIElements важно понимать, что один экземпляр может появиться только один раз в дереве визуалов.Поэтому, даже если ваш код работает, он будет работать только для одной кнопки, любая другая кнопка, пытающаяся использовать тот же стиль, потерпит неудачу.

Вместо этого вы можете использовать свойство ContentTemplate, например, так:*

Теперь кнопке присваивается значение DataTemplate, которое используется для создания дочернего элемента, который отображает содержимое кнопки.Поэтому каждая кнопка будет создавать свой собственный независимый экземпляр элемента управления Image.

1 голос
/ 12 декабря 2010

Вы должны использовать x: Key для названия вашего элемента Style, а не x: Name

0 голосов
/ 13 декабря 2010

Ваш код требует двух изменений.

  1. Изменено x:Name на x:Key, и обращайтесь к нему, когда хотите его использовать, используя StaticResource.

  2. Измените

    <Setter.Value> 
            <Image Source="whatever..." /> 
    </Setter.Value> 
    

    на это,

    <Setter.Value> 
        <DataTemplate>
            <Image Source="whatever..." /> 
        </DataTemplate>
    </Setter.Value> 
    

Проверьте, поможет ли это вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...