1.ProjectLayoutView.xaml.cs
using PrimalEditor.Components;
using PrimalEditor.GameProject;
using PrimalEditor.Utilities;
using System.Windows;
using System.Windows.Controls;
namespace PrimalEditor.Editors
{
/// <summary>
/// ProjectLayoutView.xaml 的交互逻辑
/// </summary>
public partial class ProjectLayoutView : UserControl
{
public ProjectLayoutView()
{
InitializeComponent();
}
private void OnAddGameEntity_Button_Click(object sender, RoutedEventArgs e)
{
var btn = sender as Button;
var vm = btn.DataContext as Scene;
vm.AddGameEntityCommand.Execute(new GameEntity(vm) { Name = "Empty Game Entity" });
}
private void OnGameEntities_ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
GameEntityView.Instance.DataContext = null;
var listBox = sender as ListBox;
if (e.AddedItems.Count > 0)
{
GameEntityView.Instance.DataContext = listBox.SelectedItems[0];
}
var newSection = listBox.SelectedItems.Cast<GameEntity>().ToList();
var previousSelection = newSection.Except(e.AddedItems.Cast<GameEntity>()).Concat(e.RemovedItems.Cast<GameEntity>()).ToList();
Project.UndoRedo.Add(new UndoRedoAction(
() =>
{
listBox.UnselectAll();
previousSelection.ForEach(x => (listBox.ItemContainerGenerator.ContainerFromItem(x) as ListBoxItem).IsSelected = true);
},
() =>
{
listBox.UnselectAll();
newSection.ForEach(x => (listBox.ItemContainerGenerator.ContainerFromItem(x) as ListBoxItem).IsSelected = true);
},
"Selection changed"
));
}
}
}