Стиль 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.

Другие вопросы по тегам