2009-08-21 12 views
5

Jako rozwiązanie krótkoterminowe próbuję zaciąć okno z "usercontrol" do aplikacji WPF. W widoku aplikacji WPF widzę, że mogę dodać "niestandardowy formant okna" do projektu i tworzy on pusty niestandardowy formant, ale nie mogę wymyślić, jak go dodać. Idealnie chciałbym wiedzieć jak zabrać .dll z moich skompilowanych okien, tworząc kontrolę użytkownika i włożyć go do aplikacji WPF lub zaimportować kontrolę użytkownika do aplikacji WPF.Jak umieścić niestandardową kontrolę formularzy okien w aplikacji WPF?

Dzięki Sam

Odpowiedz

7

Można naprawdę nie dodać go jako kontrolę do przybornika jak mogłeś dla Windows Forms Application. Zamiast tego należy "hostować" kontrolę użytkownika wewnątrz aplikacji WPF.

.

Oto przykład, jak korzystać z pola tekstowego maskowane (które można łatwo modyfikować, aby użyć niestandardowego formantu):

<Window x:Class="Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
Title="HostingWfInWpf"> 
<Grid> 
    <WindowsFormsHost> 
     <wf:MaskedTextBox x:Name="mtbDate" Mask="00/00/0000"/> 
    </WindowsFormsHost> 
</Grid> 
</Window> 
+0

Próbowałem tego kodu dokładnie tak, jak jest i otrzymałem ten sam błąd, o którym wspomniałem powyżej. – Shizam

+0

Czy dodano odniesienie do zestawu 'System.Windows.Forms' w folderze References? – Kredns

+0

Yup, dodał je do folderu z referencjami. Rozejrzałem się dookoła i wróciłem do strony, którą połączyłeś, a potem znalazłeś stronę powyżej, pokazującą jak dodać kontrolkę WF używając C# zamiast XAML. Próbowałem to i zadziałało, więc z jakiegokolwiek powodu podczas wykonywania aplikacji sieci Web WPF nie można go uruchomić za pośrednictwem XAML, ale można za pośrednictwem C#. http://msdn.microsoft.com/en-us/library/ms751761.aspx – Shizam

3

dodać odwołanie do System.Windows.Forms i WindowsFormsIntegration do projektu

xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
xmlns:WindowsFormsIntegration="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" 

I umieść w oknie hosta formularzy systemu Windows.

<WindowsFormsHost Name="wfhDate" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Stretch"> 
       <WinForms:FlowLayoutPanel/> 
    </WindowsFormsHost> 

Teraz w kod C#

using Forms = System.Windows.Forms; 
......................... 
Forms.FlowLayoutPanel flpPanel = this.wfhDate.Child as Forms.FlowLayoutPanel; 
// Initialize your Forms contol here. 
flpPanel.Controls.Add(yourControl); 
+0

@Lucas: Skopiowałem XAML z góry dokładnie i skompilowałem go bezbłędnie, nie wstawiłem jeszcze kodu C#, ponieważ chciałem tylko upewnić się, że XAML działa. Uruchomiłem aplikację i uległo awarii z tym wyjątkiem: System.Windows.Markup.XamlParseException był nieobsługiwany Wiadomość: Nie można utworzyć wystąpienia strony "1 zdefiniowanej w złożeniu" WpfUploaderTwo, wersja = 1.0.0.0, Culture = neutral, PublicKeyToken = null ". Wyjątek został zgłoszony przez cel wywołania. Błąd w pliku znaczników "Strona1.xaml" Wiersz 1 Pozycja 7. – Shizam

+0

Jeśli wyjmę bit WindowsFormsHost, działa dobrze. Link do kodu i błędu: http://bit.ly/aGqfG – Shizam

+0

Ah, więc robię "Aplikację internetową WPF", a nie "Aplikację WPF", nie wiem, czy to ma jakiekolwiek znaczenie. – Shizam

0

Lucasa odpowiedź jest poprawna, ale chciałem dodać coś potrzebne. Jeśli tworzysz aplikację internetową, musisz zmienić ustawienie Zabezpieczeń na To jest aplikacją pełnego zaufania. Nie mogłem uzyskać kontroli WindowsFormsHost do pracy przed wykonaniem tego.

Powiązane problemy