Переопределить или добавить некоторые свойства стиля в WPF - PullRequest
0 голосов
/ 28 мая 2020

Я портирую тему Bootstrap в WPF и столкнулся с проблемой: я не могу изменить некоторые свойства, используя дополнительный стиль для StackPanel. У меня есть ResourceDictionary, содержащий BtnBase базовый стиль и BtnPrimary, BtnSecondary et c. Все они унаследованы от BtnBase и содержат только свойства цвета. BtnBase не содержит правила margin. Когда я пытаюсь добавить правило margin для текущей StackPanel, эффекта нет. Я читал о стилях и знал, что нельзя применить более одного стиля, стили в ResourceDictionary имеют более высокий приоритет, и я должен использовать BasedOn. Но мне нужно скопировать и вставить мой стиль в StackPanel и заменить BasedOn для каждого варианта кнопки. Есть ли способ обойти его и добавить свойство margin для всех стилей?

код:

<StackPanel Orientation="Horizontal" Height="32">
        <StackPanel.Resources>
            <Style TargetType="{x:Type Button}" BasedOn="{StaticResource BtnBase}>
                <Setter Property="Margin" Value="0,0,10,0"/>
            </Style>
        </StackPanel.Resources>
        <Button Style="{DynamicResource BtnPrimary}" Content="Primary" />
        <Button Style="{DynamicResource BtnSecondary}" Content="Secondary" />
        <Button Style="{DynamicResource BtnSuccess}" Content="Success" />
        <Button Style="{DynamicResource BtnInfo}" Content="Info" />
        <Button Style="{DynamicResource BtnWarning}" Content="Warning" />
        <Button Style="{DynamicResource BtnDanger}" Content="Danger" />
        <Button Style="{DynamicResource BtnLight}" Content="Light" />
        <Button Style="{DynamicResource BtnDark}" Content="Dark" />
    </StackPanel>

Buttons

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете рассматривать все кнопки как элементы в ListBox.

ListBox создаст ListBoxItem для каждой кнопки, и вы можете добавить Margin к этим ListBoxItems, используя ItemContainerStyle. Это не изменяет стили кнопок, но создает тот же эффект.

В ItemContainerStyle я также изменяю шаблон ListBoxItem, чтобы отменить наведение, цвета выделения и т. Д. c, который может изменить внешний вид - остается только простой ContentPresenter.

ItemsPanel по умолчанию - вертикальный StackPanel, но я изменил ItemsPanel и макет на горизонтальный StackPanel.

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" Height="32"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Margin" Value="4"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <ContentPresenter/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>

    <Button Style="{DynamicResource BtnPrimary}" Content="Primary" />
    <Button Style="{DynamicResource BtnSecondary}" Content="Secondary" />
    <Button Style="{DynamicResource BtnSuccess}" Content="Success" />
    <Button Style="{DynamicResource BtnInfo}" Content="Info" />
    <Button Style="{DynamicResource BtnWarning}" Content="Warning" />
    <Button Style="{DynamicResource BtnDanger}" Content="Danger" />
    <Button Style="{DynamicResource BtnLight}" Content="Light" />
    <Button Style="{DynamicResource BtnDark}" Content="Dark" />
</ListBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...