How to makw WPF with revit

How to makw WPF with revit

cxyz278
Contributor Contributor
1,231 Views
2 Replies
Message 1 of 3

How to makw WPF with revit

cxyz278
Contributor
Contributor

大家好!

我想在Revit中使用按鈕創建一個WPF,但在我創建WPF並將Debug / .exe地址放在PussButtonData中後無法執行。

單擊按鈕後,如何執行Wpf。

 Revit api

#region Namespaces
using System;
using System.Collections.Generic;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Windows.Media.Imaging;
#endregion

namespace RevitAddin4
{
    class App : IExternalApplication
    {
        public Result OnStartup(UIControlledApplication a)
        {
            RibbonPanel panel = a.CreateRibbonPanel("TEST");
            PushButtonData data = new PushButtonData("ssss", "hello", @"C:\Users\Haseo\source\repos\WpfApp1\WpfApp1\bin\Debug\WpfApp1.exe", "WpfApp1.MainWindow.xaml.cs");
            PushButton button = panel.AddItem(data) as PushButton;
            Uri uri = new Uri(@"C:\Users\Haseo\Pictures\test.jpg");
            BitmapImage largeImage = new BitmapImage(uri);
            button.LargeImage = largeImage;

            return Result.Succeeded;
        }

        public Result OnShutdown(UIControlledApplication a)
        {
            return Result.Succeeded;
        }
    }
}

WPF

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 WpfApp1
{
    /// <summary>
    /// MainWindow.xaml 的互動邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("hello");
        }
    }
}

誰能給我建議?

 

0 Likes
Accepted solutions (1)
1,232 Views
2 Replies
Replies (2)
Message 2 of 3

jeremytammik
Autodesk
Autodesk
0 Likes
Message 3 of 3

BIM.Frankliang
Collaborator
Collaborator
Accepted solution

Hi Friend,

 

     You could do this :

PushButton myButton = CreatePushButton(Panel, "MyFunction", "我的功能");
private PushButton CreatePushButton(RibbonPanel panel, string name, string text)
{
     if (null == panel)
     {
        return null;
     }
     PushButtonData pushButtonData =  CreatePushButtonData(name, text);
     PushButton pushButton = panel.AddItem(pushButtonData) as PushButton;
     pushButton.LargeImage = LoadImage(name);
     return pushButton;
}

private PushButtonData CreatePushButtonData(string name, string text)
{
     if (null == name || null == text)
     {
          return null;
     }
     string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
     string className = $"{assemblyName}.{name}Command";
     PushButtonData pushButtonData = new PushButtonData(name, text, assemblyFilePath, className);
     return pushButtonData;
}

 

Then, create corresponding ExternalCommand:

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] 
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)] public class MyFunctionCommand : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var wnd = new MainWindow();
wnd.ShowDialog();
return Result.Succeeded;
}
}

 

Wish it is helpful 🙂

 

Best Regards,

Frank Liang

名片2.png