0

XNA ベースのタイル エディター用に作成したユーザー コントロールがあります。これは、現在 WPF アプリケーションでホストしようとしている winforms ベースのコントロールです。

WindowsFormsHost コントロールを使用して、winforms ユーザー コントロールを埋め込みます。winforms ユーザー コントロールには、Microsoft.Xna.Framework.Color 型の XnaBackground というカスタム プロパティがあります。IntelliSense の XAML でプロパティを確認できますが、設定しようとすると、XAML ウィンドウに「"Microsoft.Xna.Framework.Blue" を変換できません」というメッセージが表示されます。

カスタム IValueConverter を使用しようとしましたが、プロパティは依存関係プロパティではなく、コントロールも依存関係オブジェクトではないため、バインディングは機能しません。

winforms コントロールのプロパティ宣言は次のとおりです。

    [Category("Appearance"), DescriptionAttribute("Gets/Sets a value indicating the background color to use.")]
    [Bindable(true)]
    public Color XnaBackground { get; set; }

そして、これが私の WPF アプリケーションの XAML です。

<Window x:Class="TileEditorWPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TileEditorWPF"
    xmlns:winforms="clr-namespace:TileDisplay;assembly=TileDisplay"
    Title="MainWindow" Height="600" Width="800" Loaded="WindowLoaded">

<Window.Resources>
    <local:XnaColorConverter x:Key="colorConverter" />
</Window.Resources>
<DockPanel LastChildFill="true">
    <WindowsFormsHost Name="windowsFormsHost1" DockPanel.Dock="Top" 
                                      Background="Transparent"         
                                      HorizontalAlignment="Stretch"             
                                      VerticalAlignment="Stretch" >
        <winforms:TileDisplayControl XnaBackground="Blue" x:Name="tileDisplay1" OnDraw="TileDisplayControl_OnDraw" OnInitialize="TileDisplayControl_OnInitialize" />            
    </WindowsFormsHost>
</DockPanel>

私は WPF の専門家ではないので、答えが明らかな場合はご容赦ください。私は過去 4 時間頭をぶつけていましたが、Google 検索はどこにも行きませんでした。これは非常にニッチな問題であるため、この特定のテーマに関するトレンドを見つけるのは困難です。

4

1 に答える 1

2

プロパティに設定した文字列値を型TypeConverterに変換する方法を知っているを実装する必要があります。"Blue"XnaBackgroundMicrosoft.Xna.Framework.Color

タイプを作成しなかったMicrosoft.Xna.Framework.Color/そのソースにアクセスできないため[TypeConverter(typeof(ToXnaColorConverter)]、コンバーターを指すようにタイプをオンにする方法はありません。

ただし、XnaBackground代わりにその属性をプロパティに配置できます。したがって、「文字列」がプロパティに設定されると、文字列を解釈して適切な値を提供する必要がある....をXnaBackground通過します。TypeConverterXna.Framework.Color

[Category("Appearance"), DescriptionAttribute("Gets/Sets a value indicating the background color to use.")]
[Bindable(true)]
[TypeConverter(typeof(ToXnaColorConverter)] 
public Color XnaBackground { get; set; }
于 2012-07-13T01:22:54.633 に答える