Установка содержимого кнопки на <Image>с помощью стилей - PullRequest
6 голосов
/ 15 июня 2011

Не могу заставить это работать:

<UserControl>
    <UserControl.Resources>
        <ResourceDictionary>
            <Style x:Key="TestStyle" TargetType="{x:Type Button}">
                <Setter Property="Button.Content">
                    <Setter.Value>
                        <Image Source="D:\Temp\dictionary16.png"/>
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary>
    </UserControl.Resources>
    <StackPanel VerticalAlignment="Top" HorizontalAlignment="Left">
        <Button Style="{StaticResource TestStyle}"/>
        <Button Style="{StaticResource TestStyle}"/>
    </StackPanel>
</UserControl>

Этот код выдает следующее исключение (указывая на вторую кнопку):

Указанный элемент уже является логическим дочерним элементом другого элемента. Сначала отключите его.

Ответы [ 2 ]

18 голосов
/ 15 июня 2011

Стиль создает один экземпляр Image, вы не можете использовать его в двух местах, как это. Вы можете создать изображение как отдельный ресурс с помощью x:Shared= false и ссылаться на него в стиле, тогда в каждом месте, где используется стиль, будет создан новый.


, например

* * 1010
11 голосов
/ 16 июня 2011

Уже вчера я нашел пользователя с похожей проблемой: WPF - Изменить содержимое кнопки в стиле?

Это сообщение привело меня к этому решению (не удалось опубликовать его из-за 8-часового лимита stackoverflow -.-)

<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>
            <Image Source="{mcWPF:LangRes imgSettings16, Bitmap}" Height="14"/>
        </DataTemplate>
    </Setter.Value>
</Setter>

Не знаю, погода более чистая / грязная/ лучше, чем решение HB

...