2016-08-21 6 views
0

私の質問は、この他のポストのフォローアップの質問です:What are the different triggers in WPF?は、リスト内の最初の項目のトリガーを設定

私はアイテムがそうリストビューの最初の1(ある場合トリガートリガーを設定したいです私は余分なテキストを追加することができます)。どのタイプのトリガーを使用しますか?あなたはMultiBindingDataTriggerと、この不良少年のためのコンバータを使用する必要があります

<ListView Grid.Row="1" Grid.Column="2" Name="contactList" Margin="0,0,0,0"> 
<ListView.ItemTemplate> 
    <DataTemplate> 
     <WrapPanel> 
      <TextBlock Text="{Binding Name}" /> 
      <TextBlock> 
       <TextBlock.Style> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Style.Triggers> 
          <Trigger <!-- what do I have to put here so it triggers when the item is the first one in the list? -->> 
           <Setter Property="Text" Value=" - this is the first item in the list!!"/> 
           <Setter Property="Foreground" Value="#7f8c8d"/> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </WrapPanel> 
    </DataTemplate> 
</ListView.ItemTemplate> 
</ListView> 

答えて

0

は、ここに私のコードです。見てみな。

まず、あなたのコンバータ...

class IsFirstItemConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     ObservableCollection<NamedObject> col = (ObservableCollection<NamedObject>)values[0]; 
     if (col[0].Equals(values[1])) 
      return true; 
     else 
      return false; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

App.xamlでそれを参照する...肉のための今

<local:IsFirstItemConverter x:Key="isFirstItem"/> 

...

<ListView x:Name="lv" ItemsSource="{Binding Items}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Style> 
        <Style TargetType="{x:Type TextBlock}"> 
         <!--Text property moved to here--> 
         <Setter Property="Text" Value="{Binding Name}"/> 
         <Style.Triggers> 
          <DataTrigger Value="True"> 
           <DataTrigger.Binding> 
            <MultiBinding Converter="{StaticResource isFirstItem}"> 
             <MultiBinding.Bindings> 
              <Binding ElementName="lv" Path="ItemsSource"/> 
              <Binding/> 
             </MultiBinding.Bindings> 
            </MultiBinding> 
           </DataTrigger.Binding> 
           <Setter Property="Text" Value="First item"/> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

お知らせTextプロパティのセッターをスタイルに移動する必要があります。コントロールの明示的な宣言はスタイルのプロパティ設定子をオーバーライドするので、表示されているとおりに移動しない限り、トリガーの効果は見られません。お役に立てれば!

+0

ありがとうございますgengis_jhan。私はこれを行ったが、Convertメソッドで未処理の例外をトリガします。これは例外です。KnockPmpApp.exeで 'System.InvalidCastException'型の未処理例外が発生しました。 追加情報: 'MS.Internal.NamedObject'型のオブジェクトを 'System.Windows.Controls.ListView'型にキャストできません。この行で発生します:ListView lv =(ListView)values [0]; – chincheta73

+0

バインディングは上記の順番で表示されていますか? values []配列を介して渡されるオブジェクトは何ですか? –

+0

値[0]である - \t \t [0] \t {DependencyProperty.UnsetValue} \tオブジェクト{MS.Internal.NamedObject} 値は、[1]第一接触 – chincheta73

関連する問題