我正在尝试以编程方式创建网格,并将自定义控件作为子项附加到网格中,作为2×2矩阵中的第0列0列.更糟糕的是,我正在使用MVVM设计模式.下面是一些代码,以帮助每个人得到这个想法:
App.xaml.cs
base.OnStartup(e); var viewmodel = new MainWindowviewmodel(); var mainWindow = new MainWindow(); mainWindow.GridWindows = viewmodel.Window.GridWindows;
MainWindowviewmodel – 方法返回GridWindows.
private Grid CreateGrid() { Grid grid = new Grid(); // Create column deFinitions. ColumnDeFinition columnDeFinition1 = new ColumnDeFinition(); ColumnDeFinition columnDeFinition2 = new ColumnDeFinition(); columnDeFinition1.Width = new GridLength(640); columnDeFinition2.Width = new GridLength(640); // Create row deFinitions. RowDeFinition rowDeFinition1 = new RowDeFinition(); RowDeFinition rowDeFinition2 = new RowDeFinition(); rowDeFinition1.Height = new GridLength(340); rowDeFinition2.Height = new GridLength(340); // Attached deFinitions to grid. grid.ColumnDeFinitions.Add(columnDeFinition1); grid.ColumnDeFinitions.Add(columnDeFinition2); grid.RowDeFinitions.Add(rowDeFinition1); grid.RowDeFinitions.Add(rowDeFinition2); // Create preview window. Border border = new Border(); border.BorderThickness = new Thickness(20); border.Padding = new Thickness(8); border.SetResourceReference(Control.BackgroundProperty,"PreviewWindow"); MediaRTSPElement previewElement = new MediaRTSPElement(); previewElement.Name = "RTSPStreamPlayer"; previewElement.Stretch = Stretch.UniformToFill; previewElement.source = "rtsp://192.100.100.22/media/video1"; previewElement.VideoRenderer = VideoRendererType.EnhancedVideoRenderer; previewElement.LoadedBehavior = WPFEVR.DirectShow.Players.MediaState.Play; previewElement.Speedratio = 0.5; //border.Child = previewElement; // Add preview window. for (int i = 0; i < 4; i++) { grid.Children.Add(previewElement as UIElement); Grid.SetColumn(previewElement,i); Grid.SetRow(previewElement,i); break; } return grid; }
以及网格应分配给的XAML标记
<Grid x:Name="GridWindows"></Grid>
问题是我的自定义控件没有出现在网格布局中,继承了没有代码隐藏的xaml代码,这确实有效:
<Grid x:Name="GridWindows"> <!--<Grid.ColumnDeFinitions> <ColumnDeFinition Width="640" /> <ColumnDeFinition Width="640" /> </Grid.ColumnDeFinitions> <Grid.RowDeFinitions> <RowDeFinition Height="340" /> <RowDeFinition Height="340" /> </Grid.RowDeFinitions> <Border BorderThickness="20" Padding="8" Background="{DynamicResource ResourceKey=PreviewWindow}" Grid.Row="0" Grid.Column="0"> <evr:MediaRTSPElement x:Name="RTSPStreamPlayer" Stretch="UniformToFill" VideoRenderer="EnhancedVideoRenderer" LoadedBehavior="Play" Source="rtsp://192.100.100.22/media/video1" Speedratio="0.5" /> </Border> <Border BorderThickness="20" Padding="8" Background="{DynamicResource ResourceKey=PreviewWindow}" Grid.Row="0" Grid.Column="1"> <evr:MediaRTSPElement x:Name="RTSPStreamPlayer2" Stretch="UniformToFill" VideoRenderer="EnhancedVideoRenderer" LoadedBehavior="Play" Source="rtsp://192.100.100.78/media/video1" Speedratio="0.5" /> </Border> <Border BorderThickness="20" Padding="8" Background="{DynamicResource ResourceKey=PreviewWindow}" Grid.Row="1" Grid.Column="0"> <evr:MediaRTSPElement x:Name="RTSPStreamPlayer3" Stretch="UniformToFill" VideoRenderer="EnhancedVideoRenderer" LoadedBehavior="Play" Source="rtsp://192.100.100.78/media/video1" Speedratio="0.5" /> </Border> <Border BorderThickness="20" Padding="8" Background="{DynamicResource ResourceKey=PreviewWindow}" Grid.Row="1" Grid.Column="1"> <evr:MediaRTSPElement x:Name="RTSPStreamPlayer4" Stretch="UniformToFill" VideoRenderer="EnhancedVideoRenderer" LoadedBehavior="Play" Source="rtsp://192.100.100.22/media/video1" Speedratio="0.5" /> </Border>--> </Grid>
有关为什么程序代码不起作用的任何想法?