Динамический стиль Global Button с различным изображением для каждой кнопки - PullRequest
3 голосов
/ 24 января 2012

Я использую Кнопки в приложении Wpf C #. Я объявил стиль для этих кнопок:

  <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Margin="0" Width="100" Height="60" >
                        //some more code here that sets color and stuff
                           <ContentPresenter HorizontalAlignment="Stretch" />
                            <Image  Source="Images/search_48.png" / >
                   //some more code here (triggers)
            </Setter.Value>
        </Setter>
    </Style>

Я хочу, чтобы этот стиль применялся ко всем кнопкам в моем окне, но изображение будет другим.

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

Я установил стиль кнопки следующим образом:

<Button x:Name="buttonName" 
        Style="{DynamicResource ButtonStyle}" 
        Content="button text">

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

Есть ли способ сделать это без создания одного и того же стиля с другим именем для каждой кнопки?

1 Ответ

3 голосов
/ 24 января 2012

Почему бы вам просто не поместить изображение внутри кнопки, а не в стиле.

<Button x:Name="buttonName" Style="{DynamicResource ButtonStyle}" >
    <Image Source="Images/search_48.png" / >
</Button>

Тогда стиль будет выглядеть следующим образом:

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid Margin="0" Width="100" Height="60" >
                    //some more code here that sets color and stuff
                       <ContentPresenter HorizontalAlignment="Stretch" />
               //some more code here (triggers)
        </Setter.Value>
    </Setter>
</Style>

ОБНОВЛЕНИЕ: Если у вас есть текст и изображение, используйте панель стека:

<Button x:Name="buttonName" Style="{DynamicResource ButtonStyle}" >
    <StackPanel Orientation="Horizontal">
        <Image Source="Images/search_48.png" Stretch="None" />
        <TextBlock>text</TextBlock>
    </StackPanel>
</Button>

Использование панели стека позволит вам использовать вертикальную или горизонтальную ориентацию для расположения кнопок.Текст и изображение затем можно расположить с помощью полей внутри кнопки.

...