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>