2017-10-19 16 views
0

Ich möchte einen Pfeil Indikator zu jeder Zeile hinzufügen, die derzeit in einem WPF DataGrid ausgewählt ist. Ich bin bereit zu ändern, wenn jemand einen besseren Ansatz hat, aber was ich tun würde, was eine DataGridTemplateColumn verwenden und zwei verschiedene Stile für die Zelle und die Zeile verwenden.Ändern des Zellenstils beim Klicken auf die Zeile WPF DataGrid?

<DataGridTemplateColumn Header="ID" Width="50" CanUserSort="False"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBox Name="txtID" Text="{Binding ID, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" MaxLength="20" /> 
       <TextBox Name="txtArrow" Text="&#x21E8;" HorizontalAlignment="Stretch" Visibility="{Binding IsRowSelected, Converter={StaticResource booleanToVisibility}}" /> 
      </StackPanel> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Grundsätzlich möchte ich die txtArrow Textbox für nur die ausgewählte Zeile in der Datentabelle zu zeigen. Ich frage mich, ob dies über reine XAML und Stile erreicht werden kann. Ich weiß, WPF hat einen Zeilenanzeiger out of the box in der linken Spalte, aber leider muss ich das Kennzeichen auf der rechten Seite der ersten Spalte txtID machen. Ist das möglich?

Danke!

+0

Ihr Ansatz für mich in Ordnung aussieht. –

Antwort

0

Statt den Stil zu ändern, habe ich ein MultiDataTrigger den Pfeil Indikatoren zu zeigen, die ich anhand will, auf welcher Zeile im Datenraster ausgewählt ist. Ob dies die beste Lösung ist oder nicht, steht zur Debatte, aber der Zeilenindikator ist nur ein Pfeiltext-Zeichen innerhalb eines Gitters (und nicht eines Stackpanels) in meiner Zelle, das Platz mit einem anderen Textfeld teilt. Code unten:

<DataGridTemplateColumn Header="ID" Width="50" CanUserSort="False"> 
<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
      <Grid.ColumnDefinition Width="*" /> 
      <Grid.ColumnDefinition Width="*" /> 
      <TextBox Name="txtID" Text="{Binding ID, UpdateSourceTrigger=PropertyChanged}" MaxLength="20" /> 
      <TextBox Name="txtArrow" HorizontalAlignment="Stretch"> 
       <TextBox.Style> 
        <Style TargetType="TextBox" BaseOn="{StaticResource MyTextBoxStyle}"> 
         <Style.Triggers> 
          <MultiDataTrigger> 
           <MultiDataTrigger.Conditions> 
            <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=IsSelected}" Value="True" /> 
           </MultiDataTrigger.Conditions> 
           <Setter Property="Text" Value="--&gt;" /> 
          </MultiDataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBox.Style> 
      </TextBox> 
     </Grid> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

0
<DataGrid> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="ID" Width="50" CanUserSort="False"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBox Name="txtID" Text="{Binding ID, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" MaxLength="20" /> 
         <TextBox Name="txtArrow" Text="&#x21E8;" HorizontalAlignment="Stretch"> 
          <TextBox.Visibility> 
           <Binding Path="IsSelected" RelativeSource="{RelativeSource AncestorType=DataGridRow}"> 
            <Binding.Converter> 
             <BooleanToVisibilityConverter/> 
            </Binding.Converter> 
           </Binding> 
          </TextBox.Visibility> 
         </TextBox> 
        </StackPanel> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 
Verwandte Themen