Стиль WPF на основе родительского стиля в текущем контексте
Скажем, у меня есть стиль по умолчанию для TextBox
'TextBoxStyleBase. Затем я определяю DataGrid
стиль, который имеет свой собственный TextBox
Стиль на основе этого базового стиля, определяющий другой цвет границы.
В каком-то месте внутри DataGrid
Я хочу определить другой TextBox
стиль, но наследовать от определенного в DataGrid
стиль.
Есть ли способ заставить стиль наследовать от стиля, который в настоящее время определен для конкретного элемента управления в текущем "контексте"?
РЕДАКТИРОВАТЬ:
Чтобы было понятнее, вот что у меня есть:
<!-- explicit style for all TextBoxes -->
<Style TargetType="{x:Type TextBox}" x:Key="TextStyle">
<Setter Property="FontSize" Value="16"/>
</Style>
<!-- implicit style for all TextBoxes -->
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource TextStyle}"/>
<!-- DataGrid style changing inner TextBox style -->
<Style TargetType="{x:Type DataGrid}">
<Style.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource TextStyle}">
<Setter Property="FontSize" Value="20"/>
</Style>
<!-- since TextBox has defined implicit style this would be equivalent to -->
<!--<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="FontSize" Value="20"/>
</Style>-->
</Style.Resources>
</Style>
<Control>
<DataGrid>
<Row>
<TextBox/> <!-- should show as defined in DataGrid style -->
</Row>
<Row>
<Row.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn=" ??? ">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</Row.Resources>
<TextBox/> <!-- should show with additional trigger -->
</Row>
</DataGrid>
</Control>
Что положить в BasedOn = '???' так что текст отображается в FontSize 20, но выделен жирным шрифтом.
2 ответа
Вы не можете добавить два Styles
с тем же ключом внутри того же ResourceDictionary
, Так что, если вы уже определили неявный Style
без x:Key
в ResourceDictionary
для определенного типа нельзя добавить еще один к тому же ResourceDictionary
,
В противном случае вы должны быть в состоянии основать Style
в стиле по умолчанию, который находится в области видимости так:
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
</Style.Triggers>
</Style>
Пожалуйста, используйте следующее для текстового поля внутри сетки данных:
<Style TargetType="TextBox" BasedOn="{StaticResource <your style name>}">
PS: в вашем случае будет TextBoxStyleBase.