2017-04-18 12 views
1

ListViewItemスタイルはトリガは選択されていませんが、選択されていません。ListViewItemスタイルcantトリガ未選択

私は何かを見たいと思ってはListView項目が選択されたときに見せたときに選択されていない隠れました。

しかし、私はそれが表示されていることがわかりますが、それが隠されているのを見ることはできませんでした。

は私がhttps://msdn.microsoft.com/en-us/library/windows/apps/mt299136.aspx

からスタイルをコピーして、私は確かに私はのselectionModeがシングルセット。

私はからコピーコードが

<Style x:Key="ListViewItemStyle" TargetType="ListViewItem"> 
      <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> 
      <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> 
      <Setter Property="Background" Value="{ThemeResource ListViewItemBackground}"/> 
      <Setter Property="Foreground" Value="{ThemeResource ListViewItemForeground}"/> 
      <Setter Property="TabNavigation" Value="Local"/> 
      <Setter Property="IsHoldingEnabled" Value="True"/> 
      <Setter Property="Padding" Value="12,0,12,0"/> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="VerticalContentAlignment" Value="Center"/> 
      <Setter Property="MinWidth" Value="{ThemeResource ListViewItemMinWidth}"/> 
      <Setter Property="MinHeight" Value="{ThemeResource ListViewItemMinHeight}"/> 
      <Setter Property="AllowDrop" Value="False"/> 
      <Setter Property="UseSystemFocusVisuals" Value="True"/> 
      <Setter Property="FocusVisualMargin" Value="0"/> 
      <Setter Property="FocusVisualPrimaryBrush" Value="{ThemeResource ListViewItemFocusVisualPrimaryBrush}"/> 
      <Setter Property="FocusVisualPrimaryThickness" Value="2"/> 
      <Setter Property="FocusVisualSecondaryBrush" Value="{ThemeResource ListViewItemFocusVisualSecondaryBrush}"/> 
      <Setter Property="FocusVisualSecondaryThickness" Value="1"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListViewItem"> 
         <Grid> 
          <ContentPresenter ></ContentPresenter> 
          <Button x:Name="b" Opacity="0"></Button> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="SelectionStates"> 
            <VisualState x:Name="Unselecting"> 
             <Storyboard BeginTime="0:0:0"> 
              <DoubleAnimation Storyboard.TargetName="b" 
                Storyboard.TargetProperty="Opacity" 
                Duration="0:0:0.1" 
                To="0" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Unselected"> 
             <Storyboard BeginTime="0:0:0"> 
              <DoubleAnimation Storyboard.TargetName="b" 
                Storyboard.TargetProperty="Opacity" 
                Duration="0" 
                To="0" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Selected"> 
             <Storyboard BeginTime="0:0:0"> 
              <DoubleAnimation Storyboard.TargetName="b" 
                Storyboard.TargetProperty="Opacity" 
                Duration="0" 
                To="1" /> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 

      </Setter> 

     </Style> 

である私はアーチャーナはCustomUnselectedを使用する方法を提供し、SelectionChangedときにそれを変更するには、この答えhttps://stackoverflow.com/a/36010296/6116637を見てきました。

それは良い方法ですが、私は多くのListViewがあるだけで、XAMLを書き、それを行うに何か良い方法はit.Areを行う必要があります持っているための場所の多くに同じコードを書きたいいけませんか?

私はIsSelectedに結合するが、私はTemplateBindingのカント使用コンバートのために可視化したいときTemplateBindingのは、それを行う傾けると言う答えを見てきました。

そして私はVisibility="{Binding Path={TemplateBinding IsSelected},Converter={StaticResource BooleanVisibility},Mode=OneWay}"Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected,Converter={StaticResource BooleanInverseVisibility},Mode=OneWay}"を使用する場合、結果は私が欲しいものではありません。

を参照してください:それは本当だし、それが偽だときを示したときにこれが崩れる

public class BooleanInverseVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     return (bool)value ? Visibility.Collapsed : Visibility.Visible; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     return (Visibility)value != Visibility.Visible; 
    } 
} 

https://stackoverflow.com/a/40328520/6116637

+0

私も見https://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj709921.aspx?f=255&MSPPError=-2147217396 – lindexi

+0

参照してくださいhttp://stackoverflow.com/questions/40327901/how-to-bind-isselected-in-datatemplate-of-listviewitem私はそれをIsSelectedにバインドしたくありません。 – lindexi

+0

データテンプレートコードを投稿できますか?あなたは何を見せたいのですか? – Archana

答えて

1

は逆の可視性コンバータを作成します。

Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected,Converter={StaticResource BooleanInverseVisibility},Mode=OneWay}" 
+0

申し訳ありませんが、Convertのブレークポイントは決して入力されません。 – lindexi

+0

ちょうど私が間違っていたあなたのコードをコピー/ペーストしたことを認識しました。更新された '{Binding ..}'サンプルを見てください。 – Laith

+0

コードはあなたのようなものです変換を失うです。あなたの返信しかし、あなたのコードcantも働いています。私はRelativeSourceはTemplatedParentにバインドすることができますが、私はwant.See http://stackoverflow.com/questions/40327901/how-to-bind-isselected-in-datatemplate-of-listviewitem – lindexi

関連する問題