2017-05-19 2 views
1

Say, ich habe einen Standard-Stil für eine TextBox 'TextBoxStyleBase'. Ich definiere dann einen DataGrid Stil, der einen eigenen TextBox Stil BasedOn hat, der eine andere Border Color definiert.WPF Style BasedOn Eltern Stil im aktuellen Kontext

An einer Stelle in einem DataGrid möchte ich einen anderen TextBox Stil definieren, aber erben von dem in DataGrid definierten Stil.

Gibt es eine Möglichkeit, einen Stil von dem Stil zu übernehmen, der aktuell für ein bestimmtes Steuerelement im aktuellen Kontext definiert ist?

EDIT:

Um es klar, hier ist was ich habe:

<!-- 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> 

Was in BasedOn = setzen '???' so dass der Text in FontSize 20 erscheint, aber fett, wenn er schwebt.

<Style TargetType="TextBox" BasedOn="{StaticResource <your style name>}"> 

PS:

Antwort

0

Bitte geben Sie die folgenden für das Textfeld innerhalb des Datagrid verwenden würde TextBoxStyleBase in Ihrem Fall sein.

+0

Ich nehme an, Sie verstehen meine Frage falsch, finden Sie in meinem clearification – redstripes

+0

Warum gehst du nicht geben ein Schlüssel dazu und verwenden Sie es wo immer Sie es brauchen? –

0

Sie können nicht zwei Styles mit demselben Schlüssel innerhalb desselben ResourceDictionary hinzufügen. Wenn Sie also bereits einen impliziten Style ohne einen x:Key in einem ResourceDictionary für einen bestimmten Typ definiert haben, können Sie keinen weiteren zu demselben ResourceDictionary hinzufügen.

Andernfalls sollten Sie in der Lage sein, eine Style auf dem Standardstil zu stützen, die im Rahmen ist wie folgt:

<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Style.Triggers> 

    </Style.Triggers> 
</Style> 
Verwandte Themen