2017-03-02 35 views
2

我想知道如何以同樣的方式列索引在下面的代碼中使用行指數爲條件:如何使用行索引作爲WPF XAML中DataGridCell樣式的多觸發器中的條件?

<Style x:Key="DefaultDataGridCell" TargetType="{x:Type DataGridCell}"> 
<Setter Property="IsTabStop" Value="False" /> 
<Style.Triggers> 
    <MultiDataTrigger> 
     <MultiDataTrigger.Conditions> 
      <Condition Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Column.DisplayIndex}" Value="0" /> 
     </MultiDataTrigger.Conditions> 
     <Setter Property="IsTabStop" Value="True" /> 
    </MultiDataTrigger> 
</Style.Triggers> 

在這個例子中DataGrid的整個第一列是tabstop,但我只需要DataGrid的第一個單元格就是tabstop。我該怎麼做?

回答

0

有沒有可以綁定到該屬性返回該行的索引,但DataGridRow類有一個GetIndex()方法,你可以在一個轉換器類撥打:

namespace WpfApplication1 
{ 

    public class MyConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      return (value as DataGridRow).GetIndex(); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

<Style x:Key="DefaultDataGridCell" TargetType="{x:Type DataGridCell}" 
       xmlns:local="clr-namespace:WpfApplication1"> 
    <Style.Resources> 
     <local:MyConverter x:Key="conv" /> 
    </Style.Resources> 
    <Setter Property="IsTabStop" Value="False" /> 
    <Style.Triggers> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Column.DisplayIndex}" Value="0" /> 
       <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Converter={StaticResource conv}}" Value="0" /> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="IsTabStop" Value="True" /> 
     </MultiDataTrigger> 
    </Style.Triggers> 
</Style> 

你不能直接綁定到一個方法,所以你將不得不使用一個轉換器。