Я создал стиль по умолчанию для кнопки, включая пользовательский шаблон 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.