C# WPF:ListView&;编辑ListViewItem
我希望能够选择一个项目,然后编辑其标签:C# WPF:ListView&;编辑ListViewItem,c#,wpf,listview,C#,Wpf,Listview,我希望能够选择一个项目,然后编辑其标签: 选择一个项目 项目被突出显示 点击它的标签 标签的文本块替换为文本框 修改标签 一次只能编辑一个项目 结束编辑: 单击项目图标: TextBox被替换回TextBlock 项目仍然突出显示 单击另一项: TextBox被替换回TextBlock 已编辑的项目未被选中 单击的项目被选中并高亮显示 单击窗口的任何其他区域: TextBox被替换回TextBlock 已编辑的项目仍然突出显示 这种行为应该与Windows资源管理器中的行为非常相
- 选择一个项目
- 项目被突出显示
- 点击它的标签
- 标签的文本块替换为文本框
- 修改标签
- 一次只能编辑一个项目
- TextBox被替换回TextBlock
- 项目仍然突出显示
- TextBox被替换回TextBlock
- 已编辑的项目未被选中
- 单击的项目被选中并高亮显示
- TextBox被替换回TextBlock
- 已编辑的项目仍然突出显示
public class MediaItem : INotifyPropertyChanged
{
private bool _isEditing;
private bool _isSelected;
private string _label;
public MediaItem()
{
IsEditing = false;
_isSelected = false;
}
public bool IsEditing
{
get { return _isEditing; }
set
{
if (_isEditing == value) return;
_isEditing = value;
OnPropertyChanged("IsEditing");
}
}
public string Label
{
get { return _label; }
set
{
_label = value;
OnPropertyChanged("Label");
}
}
public DateTime Date { get; set; }
public string IconPath { get; set; }
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged("IsSelected");
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
DailyImages.cs
public class DailyImages
{
private ObservableCollection<MediaItem> _mediaItems;
public DailyImages()
{
_mediaItems = new ObservableCollection<MediaItem>();
_mediaItems.Add(new MediaItem {Label = "Image 1", IconPath = "Resources/Icon1.png"});
_mediaItems.Add(new MediaItem {Label = "Image 2", IconPath = "Resources/Icon2.png"});
_mediaItems.Add(new MediaItem {Label = "Image 3", IconPath = "Resources/Icon3.png"});
_mediaItems.Add(new MediaItem {Label = "Image 4", IconPath = "Resources/Icon4.png"});
_mediaItems.Add(new MediaItem {Label = "Image 5", IconPath = "Resources/Icon5.jpg"});
_mediaItems.Add(new MediaItem {Label = "Image 6", IconPath = "Resources/Icon6.png"});
_mediaItems.Add(new MediaItem {Label = "Image 7", IconPath = "Resources/Icon7.png"});
_mediaItems.Add(new MediaItem {Label = "Image 8", IconPath = "Resources/Icon8.png"});
_mediaItems.Add(new MediaItem {Label = "Image 9", IconPath = "Resources/Icon9.png"});
}
public ObservableCollection<MediaItem> MediaItems
{
get { return _mediaItems; }
set { _mediaItems = value; }
}
}
公共类每日图像
{
私有可观测集合_mediaItems;
公共每日图像()
{
_mediaItems=新的ObservableCollection();
_添加(新的MediaItem{Label=“Image 1”,IconPath=“Resources/Icon1.png”});
_添加(新的MediaItem{Label=“Image 2”,IconPath=“Resources/Icon2.png”});
_添加(新的MediaItem{Label=“Image 3”,IconPath=“Resources/Icon3.png”});
_添加(新的MediaItem{Label=“Image 4”,IconPath=“Resources/Icon4.png”});
_添加(新的MediaItem{Label=“Image 5”,IconPath=“Resources/Icon5.jpg”});
_添加(新的MediaItem{Label=“Image 6”,IconPath=“Resources/Icon6.png”});
_添加(新的MediaItem{Label=“Image 7”,IconPath=“Resources/Icon7.png”});
_添加(新的MediaItem{Label=“Image 8”,IconPath=“Resources/Icon8.png”});
_添加(新的MediaItem{Label=“Image 9”,IconPath=“Resources/Icon9.png”});
}
公共可观察集合媒体项
{
获取{return\u mediatems;}
设置{u mediatems=value;}
}
}
谢谢你阅读这篇长文章
我在StackOverflow搜索并阅读了许多答案,但没有一个对我来说是好的
例如:
ScrollViewer scrollViewer = GetVisualChild<ScrollViewer>(mTreeView);
scrollViewer.ScrollChanged += new ScrollChangedEventHandler(scrollViewer.....
ScrollViewer ScrollViewer=GetVisualChild(mTreeView);
scrollViewer.ScrollChanged+=新的ScrollChangedEventHandler(scrollViewer。。。。。
并在处理程序中移除焦点
查看此stackoverflow页面,了解如何将焦点从元素移开
也许在不同的状态下切换IsReadonly属性更好?这样您就不需要再切换可见性了。而且,在这种情况下,最好替换模板。感谢您的黑客攻击。实际上,我将隐藏滚动条,并使用按钮进行滚动。
public class DailyImages
{
private ObservableCollection<MediaItem> _mediaItems;
public DailyImages()
{
_mediaItems = new ObservableCollection<MediaItem>();
_mediaItems.Add(new MediaItem {Label = "Image 1", IconPath = "Resources/Icon1.png"});
_mediaItems.Add(new MediaItem {Label = "Image 2", IconPath = "Resources/Icon2.png"});
_mediaItems.Add(new MediaItem {Label = "Image 3", IconPath = "Resources/Icon3.png"});
_mediaItems.Add(new MediaItem {Label = "Image 4", IconPath = "Resources/Icon4.png"});
_mediaItems.Add(new MediaItem {Label = "Image 5", IconPath = "Resources/Icon5.jpg"});
_mediaItems.Add(new MediaItem {Label = "Image 6", IconPath = "Resources/Icon6.png"});
_mediaItems.Add(new MediaItem {Label = "Image 7", IconPath = "Resources/Icon7.png"});
_mediaItems.Add(new MediaItem {Label = "Image 8", IconPath = "Resources/Icon8.png"});
_mediaItems.Add(new MediaItem {Label = "Image 9", IconPath = "Resources/Icon9.png"});
}
public ObservableCollection<MediaItem> MediaItems
{
get { return _mediaItems; }
set { _mediaItems = value; }
}
}
ScrollViewer scrollViewer = GetVisualChild<ScrollViewer>(mTreeView);
scrollViewer.ScrollChanged += new ScrollChangedEventHandler(scrollViewer.....