gpt4 book ai didi

c# - 如何为面板中的项目添加自定义行为?

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:00 25 4
gpt4 key购买 nike

在我的 WPF 项目中,我需要一个具有以下行为的面板。当您单击某个项目时,它应该位于顶部。

Behavior of an item in the panel

关于这个我有几个问题:1. 我应该创建我的自定义面板并在 ArrangeOverride 方法中添加某种动画吗?

因此,我需要添加一些事件处理程序,但不对位于此面板中的元素进行子类化,而且我还需要为向上移动的过程设置动画。我非常坚持解决这个问题。

谢谢。

最佳答案

我认为您不需要编写面板或向面板添加行为,如果您对类进​​行正确建模,则可以使用具有选择项目能力的 ItemsControls(即 ListBox)来实现您尝试做的事情 - 我假设你正在使用 MVVM。

这种方法的好处是您无需创建和维护您可能不需要的额外面板类型。此外,您的模型和 View 模型中的所有内容都可以进行完整的单元测试。我建议尽可能使用或扩展现有的 WPF 控件和容器,但在这种情况下,我们可能没有它。

View 模型

public class ItemsVM
{

// You can always keep the items sorted based on you business rules
public ObservableCollection<ItemModel> Items {get;set;}

public ItemVM()
{
Items = new ObservableCollection<ItemModel>(){
new ItemModel(), new ItemModel()
};
}
}

型号

public class ItemModel
{
public bool IsSelected {get;set;}
public ObservableCollection<ItemModel> Items {get;set;}

public ItemModel()
{
Items = new ObservableCollection<ItemModel>();
}
}

查看

<ListBox ItemsSource={Binding Items} SelectionMode=Single />

一旦用户点击您的 ListBox 中的一项,您应该在 ItemVM 中设置相应项的 IsSelected 属性,在此属性更改时,您可以将此项添加到列表顶部元素的 Items 集合中.

您可以完全控制如何对 ItemModel 进行模板化,顶部项目现在在 Items 集合中有一个项目,可以按照您在图表中的方式显示。

关于动画这可以使用代码隐藏或附加属性来完成,这个想法很简单,你知道用户在 ListBox 上单击的位置,你应该能够获得 ListBox 中顶部元素的位置,从当前点击动画 DataTemplate位置到列表顶部

关于c# - 如何为面板中的项目添加自定义行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15089237/

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