2012-11-13 51 views
3

我有一个绑定到GridView的项目列表。该列表包含多种类型的数据。我使用ItemTemplateSelector将DataTemplate应用于不同的数据类型,以使它们每个都具有独特的外观和感觉。WinRT:如何将鼠标悬停在特定GridIViewtem的影响上?

我不知道如何去除DataTemplate中没有DataTriggers的SubClass1的GridViewItem的悬停效果。

public class Base 
{ 
    public string Name {get;set;} 
} 
public class SubClass1 : Base 
{ 
} 
public class SubClass2 : Base 
{ 
} 
public PageViewModel : ViewModelBase 
{ 
    public List<Base> ListOfBases {get;set;} 
} 


     <GridView 
     x:Name="baseGridView" 
     ItemsSource="{Binding ListOfBases}" 
     ItemTemplateSelector="{StaticResource itemsTemplateSelector}" 
     SelectionMode="Multiple" 
     IsSwipeEnabled="false" 
     IsItemClickEnabled="True" 
     > 

     <DataTemplate x:Key="SubClass1Template"> 
      <Grid Margin="0" Width="346" VerticalAlignment="Stretch" > 
       <TextBlock Grid.Column="0" Text="{Binding Name}" /> 
      </Grid> 
     </DataTemplate> 

回答

4

您将需要编辑GridViewItem的VisualState样式。为此,请在VisualStudio或Blend中的GridView上单击鼠标右键。在设计视图或文档大纲内执行此操作。选择编辑附加模板 - >编辑生成的项容器(ItemContainerStyle) - >编辑复制

如果你想彻底删除,则删除PointerOver状态中的元素

<VisualState x:Name="PointerOver"/> 

你可以用它来也对其进行更改。也许你不喜欢默认的悬停颜色,但是像另一个颜色一样,这里是你要做这些改变的地方。

UPDATE基于评论

要只对某一类的hover样式,设置用于hover样式(如:边框)的控件的可见性,以直接绑定到类。然后ValueConverter会根据类的类型返回Visible或Collapsed

+0

不幸的是,这并不能解决我的问题。我只想为特定的项目子集删除PointerOver,而不是全部。 –

+0

查看我的更新信息 –

+0

谢谢肖恩。你的建议将解决问题。我希望有一种方法可以使用我还没有发现的DataTemplate或Style。我会把这个话题留出一段时间,看看有人有另一种解决方案,否则我会接受你的。 –

相关问题