c# – 以编程方式使用自定义元素创建网格
发布时间:2020-12-15 07:49:52 所属栏目:百科 来源:网络整理
导读:我正在尝试以编程方式创建网格,并将自定义控件作为子项附加到网格中,作为2×2矩阵中的第0列0列.更糟糕的是,我正在使用MVVM设计模式.下面是一些代码,以帮助每个人得到这个想法: App.xaml.cs base.OnStartup(e);var viewModel = new MainWindowViewModel();va
我正在尝试以编程方式创建网格,并将自定义控件作为子项附加到网格中,作为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> 有关为什么程序代码不起作用的任何想法? 解决方法
如果您在xaml中创建Grid,则以后无法在代码中设置它.网格(实例)已经在visualtree中.覆盖变量不会起任何作用.您应该将Grid设置为xaml定义控件的内容.我猜你的代码看起来像这样:
码: this.GridWindows = createdGrid; XAML: <Grid x:Name="GridWindows"></Grid> 在代码中你应该有这样的东西: this.GridWindows.Children.Add(createdGrid); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |