2016-03-21 56 views
0

我目前正在使用Windows 10,并使用ListView根据我的要求显示项目。现在,我想在用户单击ListView项目时向同一页面展开ListView,并为他提供一些选项以简化用户体验。如何扩展Windows 10中SelectionChanged事件的ListView项目?

我知道如何使用DataTemplate实现ListView和显示项目,但我不确定是否可以使用ListView实现我的需求。

我想实现的东西象下面这样:

enter image description here

我要像显示联系人选项,添加照片,等上ListView项点击。我也尝试使用PopupMenu来实现相同的功能,但它具有添加多达6个命令的限制,并且我拥有比此更多的命令。我想动态添加这些选项。

+0

我真的不明白你的需要。但我会尝试: 当用户点击按钮时,使用按钮和弹出显示带有预定义内容的弹出窗口? – thang2410199

回答

1

下面是你想要的基本实现。

使用此ListView的XAML:

<ListView SelectionChanged="ListView_SelectionChanged"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 

       <Panel.Resources> 
        <Style x:Name="MainAreaStyle" TargetType="Image"> 
         <Setter Property="Width" Value="300" /> 
         <Setter Property="Margin" Value="0" /> 
        </Style> 
        <Style x:Name="DetailAreaStyle" TargetType="Rectangle"> 
         <Setter Property="Height" Value="150" /> 
         <Setter Property="Height" Value="300" /> 
         <Setter Property="Margin" Value="0,0,0,8" /> 
         <Setter Property="Visibility" Value="Collapsed" /> 
        </Style> 
       </Panel.Resources> 

       <Image Source="http://i.stack.imgur.com/L5sb9.png" Style="{StaticResource MainAreaStyle}" /> 
       <Rectangle x:Name="DetailArea" Fill="DarkBlue" Style="{StaticResource DetailAreaStyle}" /> 

      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <x:String>One</x:String> 
    <x:String>Two</x:String> 
    <x:String>Three</x:String> 
</ListView> 

使用此代码隐藏:

UIElement previous = null; 
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (previous != null) previous.Visibility = Visibility.Collapsed; 
    if (e.AddedItems.Any()) 
    { 
     var container = (sender as ListView).ContainerFromItem(e.AddedItems.First()); 
     (previous = Child<Rectangle>(container, "DetailArea")).Visibility = Visibility.Visible; 
    } 
} 

public T Child<T>(DependencyObject parent, string name) where T : FrameworkElement 
{ 
    return Children(parent).OfType<T>().FirstOrDefault(x => x.Name == name); 
} 

public List<DependencyObject> Children(DependencyObject parent) 
{ 
    var list = new List<DependencyObject>(); 
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) 
    { 
     var child = VisualTreeHelper.GetChild(parent, i) as DependencyObject; 
     if (child != null) 
     { 
      list.Add(child); 
      list.AddRange(Children(child)); 
     } 
    } 
    return list; 
} 

是这样的:

enter image description here

有意义吗?当然还有更多事情要做。但是这应该让你开始。

祝你好运。

+0

非常感谢。它真的有效。您可以建议一些API在下载图像后更改图像像素颜色而不会导致性能问题? –

相关问题