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);总结
以上是内存溢出为你收集整理的c# – 以编程方式使用自定义元素创建网格全部内容,希望文章能够帮你解决c# – 以编程方式使用自定义元素创建网格所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)