2014-01-05 5 views
0

EDIT: Когда я хочу добавить VideoStream прямо в сетку: Grid.Children.Add(VideoStream); IDE говорит, что это неправильный аргумент.Как добавить UserControl в UniformGrid в .cs

У меня есть класс:

public partial class VideoStream : UserControl 

И в MainWindow класс, я хотел бы добавить это UserControl к UniformGrid вставленной в этом окне:

<Window x:Class="HomeSecurity.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" WindowState="Maximized"> 

    <UniformGrid x:Name="Grid"> 
     <WindowsFormsHost x:Name="Host"></WindowsFormsHost> 
    </UniformGrid> 
</Window> 

public partial class MainWindow : Window { 
     public MainWindow() { 
      InitializeComponent(); 
      VideoStream VideoStream = new VideoStream(); 
      // VideoStream.TopLevel = false; 
      // WindowsFormsHost Host = new WindowsFormsHost(); 
      try { 
       Host.Child = VideoStream; 
       Grid.Children.Add(Host); //THIS CAUSES THE EXCEPTION 
      } catch (Exception e) { 
       Console.WriteLine(e.StackTrace); 
      } 

     } 
    } 

Но я получаю исключение:

A first chance exception of type 'System.ArgumentException' occurred in PresentationCore.dll 
    w System.Windows.Media.VisualCollection.Add(Visual visual) 
    w System.Windows.Controls.UIElementCollection.AddInternal(UIElement element) 
    w System.Windows.Controls.UIElementCollection.Add(UIElement element) 
    w HomeSecurity.MainWindow..ctor() w c:\Users\R\Documents\Visual Studio 2013\Projects\HomeSecurity\HomeSecurity\MainWindow.xaml.cs:wiersz 28 
'HomeSecurity.vshost.exe' (CLR v4.0.30319: HomeSecurity.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationProvider\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationProvider.dll'. Symbols loaded. 
'HomeSecurity.vshost.exe' (CLR v4.0.30319: HomeSecurity.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll'. Symbols loaded. 

Как правильно добавить этот UserControl к UniformGrid

ответ

2

Вы можете сделать это в XAML только:

<Window x:Class="HomeSecurity.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:NamespaceWhereVideoStreamDeclared" 
     Title="MainWindow" WindowState="Maximized"> 

    <UniformGrid x:Name="Grid"> 
     <WindowsFormsHost x:Name="Host"> 
      <local:VideoStream/> 
     </WindowsFormsHost> 
    </UniformGrid> 
</Window> 

Declare имен local на корневом уровне и заменить NamespaceWhereVideoStreamDeclared с реальным пространством имен, где VideStream является объявлен.


Если вы хотите сделать это в коде позади, вам не нужно, чтобы добавить узел к сетке, так как Хост уже ребенок Сетка.

Grid.Children.Add(Host); // Remove this line and you are good to go. 
+0

Но когда я хочу, чтобы пользователь решил, сколько именно этого пользовательского контроля он хочет видеть. как это сделать без кода C#? В XAML нет никаких условных инструкций. – Yoda

+1

Проверьте обновление в ответ. –

+0

Хорошая точка, упустил это. Спасибо, но проблема в том, что теперь я не вижу контроля пользователя в этой сетке. Я имею в виду, что ни один пользовательский элемент управления, который я создал, не виден в этой унифицированной форме. Когда я изменил «VideoStream», чтобы получить «Form», содержимое будет видимым, но мне сказали, что stackoverflow, который «VideoStream» должен выводить после 'UserControl' не' Form' – Yoda

Смежные вопросы