c# – 以编程方式使用自定义元素创建网格

c# – 以编程方式使用自定义元素创建网格,第1张

概述我正在尝试以编程方式创建网格,并将自定义控件作为子项附加到网格中,作为2×2矩阵中的第0列0列.更糟糕的是,我正在使用MVVM设计模式.下面是一些代码,以帮助每个人得到这个想法: App.xaml.cs base.OnStartup(e);var viewModel = new MainWindowViewModel();var mainWindow = new MainWindow();m 我正在尝试以编程方式创建网格,并将自定义控件作为子项附加到网格中,作为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);
总结

以上是内存溢出为你收集整理的c# – 以编程方式使用自定义元素创建网格全部内容,希望文章能够帮你解决c# – 以编程方式使用自定义元素创建网格所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1244251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存