2016-03-21 7 views
0

UWPでは、ListViewItemが選択されるたびに、ストーリーボードがトリガーされ、コンポーネントがタッチの圧力に反応していると感じるようになります。そのストーリーボードは、リリースされるまでListViewItemの背景色も変更します。UWPでのListViewItemの視覚的な振る舞いを変更する方法は?

私はListViewを内部的に使用するUserControlを設計しましたが、アプリケーションの提案された設計に実際には適合しないため、この動作を無効にしたいと考えています。

ベローは、私がかつての試みが失敗したとして、そのDataTemplate定義を通じてControlTemplateを通って、ListViewItemListViewの両方に適用しようとしたVisualStateGroupsです。

<VisualStateManager.VisualStateGroups> 
    <VisualStateGroup x:Name="CommonStates"> 
     <VisualState x:Name="Normal" /> 
     <VisualState x:Name="PointerOver" /> 
     <VisualState x:Name="Pressed" /> 
     <VisualState x:Name="PointerOverPressed" /> 
     <VisualState x:Name="Disabled" /> 
    </VisualStateGroup> 
    <VisualStateGroup x:Name="FocusStates"> 
     <VisualState x:Name="Focused" /> 
     <VisualState x:Name="UnFocused" /> 
     <VisualState x:Name="PointerFocused" /> 
    </VisualStateGroup> 
    <VisualStateGroup x:Name="SelectionStates"> 
     <VisualState x:Name="Unselecting" /> 
     <VisualState x:Name="Unselected" /> 
     <VisualState x:Name="UnselectedPointerOver" /> 
     <VisualState x:Name="UnselectedSwiping" /> 
     <VisualState x:Name="Selecting" /> 
     <VisualState x:Name="Selected" /> 
     <VisualState x:Name="SelectedSwiping" /> 
     <VisualState x:Name="SelectedUnfocused" /> 
    </VisualStateGroup> 
</VisualStateManager.VisualStateGroups> 

一つの可能​​性は、私はデフォルトの動作にアイテムが選択されたすべての時間をオーバーライドすることができるようにItemsContainerDataTemplateのルートグリッドをバインドすることができます。しかし、私はXAMLに精通しておらず、自分でこれを行う正しい方法を理解できませんでした。

答えて

0

時間がかかりましたが、結局は予想よりも簡単でした。私はちょうど私がListViewControlTemplateでひっくり返っていたように私が前にしなかったListViewItemをターゲットにしてControlTemplateを追加しなければなりませんでした。

ListViewItemを直接宣言していないので、方法はListView.ItemContainerStyleを使用することです。以下のように、最終的な結果は次のとおりです。

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListViewItem"> 
        <ListViewItemPresenter /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ListView.ItemContainerStyle> 

あなたが見ることができるように、空のListViewItemPresenterは、デフォルト動作のほとんどをオーバーライドするには十分です。私は押すアニメーションを取り除くことができませんでしたが、私は現在の結果に満足しています。

0

これはListViewItemPresenterを使用しています。そして、テンプレート可能ではないことを発見したと確信しています。このよりカプセル化されたアプローチの目的は純粋にパフォーマンスです。その結果、ListView内の項目は、測定するのが速くなります。しかし、あなたがそれを変更したいとき、あなたは固執しているということを意味します。自分のプレゼンターを使用してパフォーマンスの改善を巻き返すことができないことを意味しますか?カスタムコードがたくさんあることになりますか?はい。それは不可能なのでしょうか?いいえ、いいアイデアですか?まあ。私はそれに答える方法を知らない。しかし、少なくともあなたはなぜそれがレンガの壁であるように見えるかを知っています。

+0

これはどこに文書化されていますか?このような詳細はhttps://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.primitives.listviewitempresenterには表示されません。 – Trevor

関連する問題