Пользовательский ControlTemplate по умолчанию не применяется при использовании стиля - PullRequest
2 голосов
/ 08 марта 2010

Я создал стиль по умолчанию для кнопки, включая пользовательский шаблон ControlTemplate, например:

<Style TargetType="{x:Type Button}">
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderBrush" Value="Black"/>
    <!-- ...other property setters... -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid x:Name="gridMain">
                    <!-- some content here -->
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Этот стиль добавляется в мой общий ResourceDictionary, который загружается каждым элементом управления. Теперь этот стиль / шаблон применяется ко всем моим кнопкам, как и ожидалось, но он НЕ применяется к тем кнопкам, которые локально используют другой стиль. Например, я хочу иметь определенный запас для кнопок «ОК», «Применить» и «Отмена». Поэтому я определил следующий стиль:

<Style x:Key="OKApplyCancelStyle" TargetType="{x:Type Button}">
    <Setter Property="Margin" Value="4,8"/>
    <Setter Property="Padding" Value="8,6"/>
    <Setter Property="MinWidth" Value="100"/>
    <Setter Property="FontSize" Value="16"/>
</Style>

... и применил этот стиль к моим кнопкам, используя StaticResource:

<Button Content="OK" Style="{StaticResource OKApplyCancelStyle}"/>

Для меня ожидаемым результатом будет то, что приведенный выше ControlTemplate будет по-прежнему применяться с использованием значений Margin, Padding, MinWidth и FontSize из «OKApplyCancelStyle». Но это не так. Вместо этого используется шаблон Windows ControlTemplate по умолчанию, используя значения из стиля.

Это типичное поведение? Действительно ли локальный стиль переопределяет пользовательский шаблон ControlTemplate? Если так, как я могу достичь желаемого поведения? То есть по-прежнему использовать мой пользовательский шаблон ControlTemplate, даже если стили определены локально?

Большое спасибо заранее, gehho.

1 Ответ

5 голосов
/ 08 марта 2010

Полностью из памяти здесь, но что-то вроде (или очень похоже)

<Style x:Key="OKApplyCancelStyle" BasedOn="{StaticResource {x:Type Button}}">
<!--Style here-->
</Style>

может работать.

...