0

Extended WPF Toolkit に基づいて、CommonNumericUpDown<Station>線形に沿った AutoCAD ステーション用に独自のステーションを作成したいと考えています。これは、StandAlone-WPF-App ではかなりうまく機能します。ディスク上の任意の場所から AutoCAD にネットロードすると、XamlParseException「メソッドまたは操作が実装されていません。」が発生しますが、DLL を AutoCAD-install-directory に配置しても問題なく動作します。また、自分のCommonNumericUpDown<Double>作品をかなりうまく作成しています。エラーは、UpDownBase のプロパティの 1 つを設定するとすぐに表示されます。AutoCAD はどこで私を騙していますか?

これが私のコードです。できるだけ単純化するために、 を拡張しUpDownBase<T>ました。

using System;
using System.Windows;

using Xceed.Wpf.Toolkit.Primitives;

using Autodesk.AutoCAD.Runtime;

namespace My.AutoCAD.UITest
{
    class UpDownBaseDoubleUpDown : UpDownBase<double>
    {
        protected override double ConvertTextToValue(string text)
        {
            return double.Parse(text);
        }

        protected override string ConvertValueToText()
        {
            return Value.ToString();
        }

        protected override void OnDecrement()
        {
            Value -= 1;
        }

        protected override void OnIncrement()
        {
            Value += 1;
        }

        protected override void SetValidSpinDirection() { }

        static UpDownBaseDoubleUpDown()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(UpDownBaseDoubleUpDown), new FrameworkPropertyMetadata(typeof(UpDownBaseDoubleUpDown)));
        }
    }

    public struct Station : IFormattable, IComparable<Station>
    {
        public double Value { get; set; }

        public Station(double value) { Value = value; }

        public int CompareTo(Station other)
        {
            return Value.CompareTo(other.Value);
        }

        public static Station Parse(string s) { return new Station(double.Parse(s)); }

        public override string ToString() { return Value.ToString(); }
        public string ToString(string format, IFormatProvider formatProvider)
        {
            return Value.ToString(format, formatProvider);
        }
    }

    public class UpDownBaseStationUpDown : UpDownBase<Station>
    {
        protected override Station ConvertTextToValue(string text)
        {
            return Station.Parse(text);
        }

        protected override string ConvertValueToText()
        {
            return Value.ToString();
        }

        protected override void OnDecrement()
        {
            Value = new Station(Value.Value - 1);
        }

        protected override void OnIncrement()
        {
            Value = new Station(Value.Value + 1);
        }

        protected override void SetValidSpinDirection() { }

        static UpDownBaseStationUpDown()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(UpDownBaseStationUpDown), new FrameworkPropertyMetadata(typeof(UpDownBaseStationUpDown)));
        }
    }

    /// <summary>Interaction logic for StationUpDownTest.xaml</summary>
    public partial class StationUpDownTest : Window
    {
        public StationUpDownTest()
        {
            InitializeComponent();
        }
    }

    public class Commands
    {
        [CommandMethod("TestMgdStationUpDown")]
        public void TestMgdStationUpDown()
        {
            var dlg = new StationUpDownTest();
            Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowModalWindow(dlg);
        }
    }
}

Generic.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                    xmlns:local="clr-namespace:My.AutoCAD.UITest"
                    xmlns:core="clr-namespace:Xceed.Wpf.Toolkit.Core;assembly=Xceed.Wpf.Toolkit"
                    >
    <ResourceDictionary.MergedDictionaries>
        <core:VersionResourceDictionary AssemblyName="Xceed.Wpf.Toolkit" SourcePath="NumericUpDown/Themes/Generic.xaml" />
    </ResourceDictionary.MergedDictionaries>

    <Style TargetType="local:UpDownBaseStationUpDown" BasedOn="{StaticResource NumericUpDown}" />

    <Style TargetType="local:UpDownBaseDoubleUpDown" BasedOn="{StaticResource NumericUpDown}" />

</ResourceDictionary>

StationUpDownTest.xaml:

<Window
             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:My.AutoCAD.UITest"
             xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" x:Class="My.AutoCAD.UITest.StationUpDownTest"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <!-- doesn't work -->
        <local:UpDownBaseStationUpDown HorizontalAlignment="Left" Margin="55,106,0,0" VerticalAlignment="Top" Width="136" Height="47"
                                       AllowSpin="False"
                                       />

        <!-- works -->
        <local:UpDownBaseDoubleUpDown HorizontalAlignment="Left" Margin="55,106,0,0" VerticalAlignment="Top" Width="136" Height="47" 
                                    AllowSpin="False"
                                    />
    </Grid>
</Window>
4

2 に答える 2

1

Process Explorerをダウンロードしてインストールし、acad.exe プロセスを選択して、コンテキスト メニューの[プロパティ... ]の[ .NET アセンブリ] タブで、読み込まれているアセンブリを確認します。別の拡張機能によってロードされた Extended WPF Toolkitの古いバージョンが存在する可能性があります。

Fuslogvwを使用して、バインドの問題がないかどうかを確認することもできます。

于 2016-02-11T07:59:32.893 に答える
0

さらに数日試行した後、Extended WPF Toolkit を削除してもエラーが残ることがわかりました。次の質問も見つかりました:一部の環境での WPF 4.0 アプリケーションの読み込みエラー

AppDomain.CurrentDomain.AssemblyResolve += ResolveAssembly;私の同僚は、アタッチして戻ることで問題を解決しましたAssembly.LoadFile (assemblyPath);

于 2016-03-22T14:57:46.117 に答える