簡體   English   中英

如何在XAML中為WPF中托管的Winforms UserControl解析自定義屬性名稱?

[英]How To Resolve Custom Property Name In XAML For a Winforms UserControl Hosted In WPF?

我有一個用於基於XNA的磁貼編輯器編寫的用戶控件。 這是一個基於winforms的控件,我現在正試圖在WPF應用程序中托管。

我正在使用WindowsFormsHost控件來嵌入winforms用戶控件。 在winforms usercontrol上,我有一個名為XnaBackground的自定義屬性,其類型為Microsoft.Xna.Framework.Color。 我可以在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個小時里,我一直在敲打我的腦袋,谷歌搜索讓我無處可去。 這是一個利基問題,很難找到這個特定主題的任何趨勢。

您需要實現一個TypeConverter ,它知道如何將您在XnaBackground屬性中設置的"Blue"字符串值轉換為Microsoft.Xna.Framework.Color類型。

因為您沒有創建Microsoft.Xna.Framework.Color類型/無法訪問其源,所以無法將[TypeConverter(typeof(ToXnaColorConverter)]類型放在指向轉換器的類型上。

但是,您可以將該屬性放在XnaBackground屬性上。 因此,當在XnaBackground屬性上設置“string”時,它將通過您的TypeConverter ....它應該解釋字符串並提供合適的Xna.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; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM