2017-10-19 139 views
0

我想添加一个箭头指示器到WPF DataGrid当前选择的任何行。我愿意改变,如果有人有更好的方法,但我会做什么使用DataGridTemplateColumn并使用两种不同的样式的单元格和行。当单击行时可能更改单元格样式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> 

基本上,我想txtArrow文本框来显示仅在数据网格中选择行。我想知道这是否可以通过纯XAML和样式来实现。我知道WPF在最左边的列中有一个行指示符,但不幸的是,我需要在第一列txtID的右侧做出指示符。这可能吗?

谢谢!

+0

你的方法看起来好像没什么问题。 –

回答

0

而不是改变风格,我用MultiDataTrigger来显示我想要的箭头指标,根据数据网格中选择的行。不管这是否是最佳解决方案,都需要辩论,但行标识符仅仅是我单元格中与另一个文本框共享空间的网格(而不是堆栈面板)内的箭头文本字符。如下图所示代码:

<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> 
相关问题