创建类 ShowViewCmd
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using ShowView.WPF;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ShowView.Cmd
{
[TransactionAttribute(TransactionMode.Manual)]
public class ShowViewCmd : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Application application = uiApp.Application;
UIDocument uIDocument = uiApp.ActiveUIDocument;
Document document = uIDocument.Document;
View view = document.ActiveView;
ShowViewWPF showViewWPF = new ShowViewWPF(document);
showViewWPF.ShowDialog();
return Result.Succeeded;
}
}
}
ShowViewWPF
<Window x:Class="ShowView.WPF.ShowViewWPF"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ShowView.WPF"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.1*"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Label>视图:</Label>
<ComboBox Name="cb_views" DisplayMemberPath="Name" SelectionChanged="cb_views_SelectionChanged"/>
</StackPanel>
<Grid Grid.Row="1" Name="grid1">
</Grid>
</Grid>
</Window>
后端
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ShowView.WPF
{
public partial class ShowViewWPF : Window
{
Document document = null;
public ShowViewWPF(Document document)
{
InitializeComponent();
this.document = document;
FilteredElementCollector elements = new FilteredElementCollector(document);
List<View> views = elements.OfClass(typeof(View)).Where(x => x.GetTypeId() != null && (document.GetElement(x.GetTypeId()) is ViewFamilyType) ).Cast<View>().ToList();
cb_views.ItemsSource = views;
cb_views.SelectedIndex = 0;
}
PreviewControl previewControl = null;
public void LoadView(View view)
{
if (previewControl != null)
{
this.grid1.Children.Clear();
previewControl.Dispose();
}
previewControl = new PreviewControl(document, view.Id);
grid1.Children.Add(previewControl);
}
private void cb_views_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
View view = cb_views.SelectedItem as View;
if (view != null)
{
LoadView(view);
}
}
}
}