我正在尝试以编程方式创建网格,并将自定义控件作为子项附加到网格中,作为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>
有关为什么程序代码不起作用的任何想法?