SKKYJE 2022-11-11 11:30 采纳率: 25%
浏览 75
已结题

WPF使用后台代码动态创建样式

我的WPF主窗体如下图 ,有5行1列,然后三个按钮,我要实现点击其中一个按钮动态加载控件

<Window x:Class="LQ.MES.BurnSyetem.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:LQ.MES.BurnSyetem"
        mc:Ignorable="d"
        Title="MainWindow" Height="754.444" Width="1409.952" Loaded="Window_Loaded">
    

    <Grid x:Name="GridControl" ShowGridLines="True" RenderTransformOrigin="0.5,0.49">
        <Grid.RowDefinitions>
            <RowDefinition Height="34*"></RowDefinition>
            <RowDefinition Height="62*"></RowDefinition>
            <RowDefinition Height="138*"></RowDefinition>
            <RowDefinition Height="118*"></RowDefinition>
            <RowDefinition Height="373*"></RowDefinition>

        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Menu Grid.Row="0" Grid.Column="0" Margin="0,0,0.2,1.4">
            <MenuItem Name="menuConfig" Header="系统参数配置" Click="menuConfig_Click" Height="31"/>
            <MenuItem Name="menuFlashRunner" Header="小黑盒烧录" Click="menuFlashRunner_Click"/>
            <MenuItem Name="FlashRunner" Header="FlashRunner烧录" Click="FlashRunner_Click"/>
        </Menu>
    </Grid>
</Window>


 //主窗体第一行内再加载一个10列的Grid
            Grid msggrid = new Grid();
            msggrid.Name = "Msggrid";
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ColumnDefinitions.Add(new ColumnDefinition());
            msggrid.ShowGridLines = true;

            //Button,开始暂停按钮          
            Button btnsta = new Button();
            btnsta.Content = "开始";
            btnsta.Name = "btnSta";
            var btnend = new Button();
            btnend.Content = "结束";
            btnend.Name = "btnend";

            //创建一个StackPanel用于存放Button开始暂停按钮  
            var wrappanel = new StackPanel();
            wrappanel.Orientation = Orientation.Horizontal;
            wrappanel.Children.Add(btnsta);
            wrappanel.Children.Add(btnend);

            //存放开始暂停按钮的GroupBox
            var functiongroup = new GroupBox();
            functiongroup.Header = "运行";
            functiongroup.HorizontalAlignment = HorizontalAlignment.Stretch;
            functiongroup.VerticalAlignment = VerticalAlignment.Stretch;
            functiongroup.BorderBrush = Brushes.Gray;
            functiongroup.Padding = new Thickness(50);
            functiongroup.BorderThickness = new Thickness(3);
            functiongroup.Content = wrappanel;

            //存放基础信息的GroupBox
            var basicinformationgroup = new GroupBox();
            basicinformationgroup.Header = "基础信息";
            basicinformationgroup.HorizontalAlignment = HorizontalAlignment.Stretch;
            basicinformationgroup.BorderBrush = Brushes.Gray;
            basicinformationgroup.Padding = new Thickness(50);
            basicinformationgroup.BorderThickness = new Thickness(3);

            //将msggrid放到主窗体Grid的第一行
            Grid.SetRow(msggrid, 1);
            Grid.SetColumn(msggrid, 0);
            GridControl.Children.Add(msggrid);

            //将存放开始暂停按钮的GroupBox放到msggrid里面
            Grid.SetRow(functiongroup, 0);
            Grid.SetColumn(functiongroup, 0);
            Grid.SetColumnSpan(functiongroup, 2);
            msggrid.Children.Add(functiongroup);

            //将存放基础信息按钮的GroupBox放到msggrid里面
            Grid.SetRow(basicinformationgroup, 1);
            Grid.SetColumn(basicinformationgroup, 3);
            Grid.SetColumnSpan(basicinformationgroup, 7);
            msggrid.Children.Add(basicinformationgroup);

img

但是我把对应GroupBox的Content换成Header他就能正常的显示在Header这个地方

img

我想要达到的结果就是我的Button控件能正常显示到GroupBox的Content

  • 写回答

2条回答 默认 最新

  • .LAL. C/C++领域新星创作者 2022-11-11 11:46
    关注

    <Window x:Class=“wpf_DataGird_Test.MainWindow”

    xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation”

    xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml”

    xmlns:d=“http://schemas.microsoft.com/expression/blend/2008”

    xmlns:mc=“http://schemas.openxmlformats.org/markup-compatibility/2006”

    xmlns:local=“clr-namespace:wpf_DataGird_Test”

    mc:Ignorable=“d”

    Title=“DataGrid Demo1” Height=“450” Width=“800”>

    <DataGrid x:Name=“dg” Margin=“5”

    AutoGenerateColumns=“False”

    LoadingRow=“dg_LoadingRow”

    CanUserAddRows=“False”

    RowHeaderWidth=“20”>

    <DataGrid.ColumnHeaderStyle>

    </DataGrid.ColumnHeaderStyle>

    <DataGrid.Columns>

    <DataGridTextColumn Binding="{Binding Name}" IsReadOnly=“True” Header=“Author Name”

    Width=“160” FontFamily=“Georgia” FontSize=“18” FontWeight=“Black” SortDirection=“Descending”/>

    </DataGrid.Columns>

    在后台代码中添加数据模型:

    public class Author

    {

    public int ID { get; set; }

    public string Name { get; set; }

    public DateTime DOB { get; set; }

    public string BookTitle { get; set; }

    public bool IsMVP { get; set; }

    public string Email { get; set; }

    public string City { get; set; }

    public string Country { get; set; }

    public int Zip { get; set; }

    }

    窗口页面的后台代码:

    namespace wpf_DataGird_Test

    {

    ///

    /// MainWindow.xaml 的交互逻辑

    ///

    public partial class MainWindow : Window

    {

    public MainWindow()

    {

    InitializeComponent();

    dg.ItemsSource = CreateDemoSource();

    }

    //

    private void dg_LoadingRow(object sender, DataGridRowEventArgs e)

    {

    e.Row.Header = (e.Row.GetIndex() + 1).ToString();

    }

    //创建数据源

    private List CreateDemoSource()

    {

    List authors = new List();

    authors.Add(new Author()

    {

    ID = 101,

    Name = “Mahesh Chand”,

    BookTitle = “Graphics Programming with GDI+”,

    DOB = new DateTime(1975, 2, 23),

    IsMVP = false

    });

    authors.Add(new Author()

    {

    ID = 201,

    Name = “Mike Gold”,

    BookTitle = “Programming C#”,

    DOB = new DateTime(1982, 4, 12),

    IsMVP = true

    });

    authors.Add(new Author()

    {

    ID = 244,

    Name = “Mathew Cochran”,

    BookTitle = “LINQ in Vista”,

    DOB = new DateTime(1985, 9, 11),

    IsMVP = true

    });

    return authors;

    }

    }

    }

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月12日
  • 创建了问题 11月11日

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试