gpt4 book ai didi

所选项目的 C# UWP Listview/GridView 标记

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:56 24 4
gpt4 key购买 nike

我正在创建 UWP 应用程序,我在 ListView 中为所选项目制作了外部箭头“标记”...

像这样:enter image description here

我已经设法通过下一个代码实现了这一点:

var current = lvMain.Items.FirstOrDefault(a => (a as MyModel).Selected) as MyModel;
ListViewItem selected = lvMain.ContainerFromItem(current) as ListViewItem;
GeneralTransform generalTransform1 = gvEpg.TransformToVisual(selected);
Point currentPoint = generalTransform1.TransformPoint(new Point());

在 Scroll change 事件中,我调用它并通过我的项目的 Point 设置箭头位置。这是有效的。

但是,我想简化这个。是否有任何类型的绑定(bind)或类似的东西,可以使箭头始终跟随项目?

最佳答案

这是示例。

XAML 主页:

<Page.Resources>
<DataTemplate x:Key="DataTemplate">
<Canvas Height="80" Width="200">
<TextBlock Text="{Binding}"/>
</Canvas>
</DataTemplate>
</Page.Resources>

<StackPanel Orientation="Horizontal">
<ListView x:Name="ListView" Width="400"
SelectionChanged="ListView_OnSelectionChanged"
ItemTemplate="{StaticResource DataTemplate}"/>

<Canvas x:Name="ParentCanvas">
<Image x:Name="Arrow"
Stretch="UniformToFill" Width="200" Height="80"
Source="Assets/Red_Left_Arrow.png"/>
</Canvas>
</StackPanel>

代码隐藏:

    private readonly List<string> _names = new List<string>();
private Visual _rectangleVisual;
private Visual _parentVisual;

public MainPage()
{
InitializeComponent();
Loaded += MainPage_Loaded;
}

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 32; i++)
{
_names.Add("item " + i);
}

ListView.ItemsSource = _names;

_parentVisual = ElementCompositionPreview.GetElementVisual(ParentCanvas);
_rectangleVisual = ElementCompositionPreview.GetElementVisual(Arrow);

var border = VisualTreeHelper.GetChild(ListView, 0) as Border;
var scrollViewer = border.Child as ScrollViewer;

var scrollerProperties = ElementCompositionPreview.GetScrollViewerManipulationPropertySet(scrollViewer);

var offsetExpressionAnimation = _rectangleVisual.Compositor.CreateExpressionAnimation("Scroller.Translation.Y");
offsetExpressionAnimation.SetReferenceParameter("Scroller", scrollerProperties);

_rectangleVisual.StartAnimation("Offset.Y", offsetExpressionAnimation);
}

private void ListView_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var listViewItem = ListView.ContainerFromItem(ListView.SelectedItem) as ListViewItem;
var listItemVisual = ElementCompositionPreview.GetElementVisual(listViewItem);

_parentVisual.Offset = new Vector3(_parentVisual.Offset.X, listItemVisual.Offset.Y, 0);
}

看起来像你要求的:

enter image description here

关于所选项目的 C# UWP Listview/GridView 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com