Подтвердить что ты не робот

Настройка содержимого кнопки в стиле

У меня есть кнопка WPF, определенная следующим образом:

<Button Style="{StaticResource RevertButtonStyle}" />

вот как выглядит стиль:

<Style x:Key="RevertButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Height" Value="25" />
    <Setter Property="Width" Value="20" />
    <Setter Property="Margin" Value="3,0,0,0" />
</Style>

Как изменить стиль, чтобы указать Content для использования изображения с именем "revert.png"?

Спасибо,

4b9b3361

Ответ 1

Вы не можете использовать свойство Content для экземпляра элемента управления Image, так как тогда изображение может использоваться более чем одной кнопкой. Это приведет к тому, что исключение "visual is is a child of another visual".

Вместо этого вы можете использовать DataTemplate следующим образом:

<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>
            <Image Source="revert.png" />
        </DataTemplate>
    </Setter.Value>
</Setter>

Очевидно, вам может потребоваться настроить URI источника изображения.

Ответ 2

В моем приложении я определил элемент управления ImageButton, который указывает свойство ImageSource.

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

<Style TargetType="{x:Type controls:ImageButton}">
    <Setter Property="ForceCursor" Value="True" />
    <Setter Property="Cursor" Value="Hand" />

    <Setter Property="ToolTip" Value="{Binding Path=Caption, RelativeSource={RelativeSource Mode=Self}}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type controls:ImageButton}">
                <Image Width="16" Height="16" Source="{Binding Path=ImageSource, RelativeSource={RelativeSource Mode=TemplatedParent}}" Name="image" />

                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="image" Property="Opacity" Value="0.3" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Но в вашем случае, если вы хотите использовать одно и то же изображение для всех объектов Button с определенным набором Style, вы можете просто использовать <Image Source="pack://application:,,,/My.Assembly.Name;component/Icons/revert.png" /> в Template, если изображение, которое вы хотите использовать был включен как ресурс в приложении.