WPF页面动态生成

返回目录


 Page加载机制与页面动态生成

布局图:
在这里插入图片描述
在这里插入图片描述


设计过程
Step1:页面加载完毕初始化

        public Page2()
        {
            InitializeComponent();
            this.Loaded += pageInit;
        }

Step2:控件动态加载
Page2.xaml修改

<Page x:Class="Test1.Page2"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Test1"
      xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 
      mc:Ignorable="d" 
      d:DesignHeight="450" d:DesignWidth="690"
      Title="Page2">
    <Page.Resources>
        <Style  TargetType="RadioButton" BasedOn="{StaticResource MaterialDesignTabRadioButton}">
                <Setter Property="Margin" Value="5 5" />
                <Setter Property="Width" Value="100" />
                <Setter Property="Height" Value="30"/>
                <!--<Style.Triggers>
                    <Trigger  Property="RadioButton.IsChecked" Value="True">
                        <Setter Property="RadioButton.Background"  Value="LightBlue"/>
                    </Trigger>
                    <Trigger  Property="RadioButton.IsChecked"  Value="False">
                        <Setter Property="RadioButton.Background"  Value="WhiteSmoke"/>
                    </Trigger>
                </Style.Triggers>-->
            </Style>
        </Page.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="50"/>
            <RowDefinition />
            <RowDefinition Height="100"/>
        </Grid.RowDefinitions>
        
        <Border Grid.ColumnSpan="2">
            <materialDesign:ColorZone
  Mode="PrimaryMid">
                <StackPanel x:Name="stkp1" Orientation="Horizontal" >
                    <!--<RadioButton x:Name="rb1" Checked="RbChecked" Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡1" FontSize="15" VerticalAlignment="Center"/>
                    <RadioButton x:Name="rb2" Checked="RbChecked"  Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡2" FontSize="15" VerticalAlignment="Center"/>
                    <RadioButton x:Name="rb3" Checked="RbChecked"  Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡3" FontSize="15" VerticalAlignment="Center"/>
                    <RadioButton x:Name="rb4" Checked="RbChecked"  Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡4" FontSize="15" VerticalAlignment="Center"/>
                    <RadioButton x:Name="rb5" Checked="RbChecked"  Margin="2 2" Style="{StaticResource MaterialDesignTabRadioButton}" Content="选项卡5" FontSize="15" VerticalAlignment="Center"/>-->
                </StackPanel>
            </materialDesign:ColorZone>
        </Border>
        <GroupBox Grid.Row="1" Margin="5 5" Header="Image">
            <Image x:Name="image"  Stretch="UniformToFill" />
            <!--<Image.Style>
                    <Style>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=rb1,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC.jpg" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=rb2,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC2.jpg" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=rb3,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC3.jpg" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=rb4,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC4.png" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=rb5,Path=IsChecked,Mode=OneWay}" Value="True">
                                <Setter Property="Image.Source" Value="pack://application:,,,/Resources/CC5.jpg" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Image.Style>
            </Image>-->
        </GroupBox>
        <GroupBox Grid.Row="1" Grid.Column="1" Margin="5 5" Header="Text">
            <ScrollViewer  VerticalScrollBarVisibility="Auto">

                <TextBlock TextWrapping="Wrap" FontSize="15" >
                WPF 为Windows Presentation Foundation的首字母缩写 ,中文译为“Windows呈现基础”,其原来代号为“Avalon”,因与“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。由 .NET Framework 3.0 开始引入,与 Windows Communication Foundation及 Windows Workflow Foundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库。
WPF是微软新一代图形系统,运行在.NET Framework 3.0及以上版本下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得
WPF
WPF
益于WPF。 程序员在WPF的帮助下,要开发出媲美Mac程序的酷炫界面已不再是遥不可及的奢望。 WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的.NET UI 框架,集成了矢量图形,丰富的流动文字支持(flow text support),3D视觉效果和强大无比的控件模型框架。
Windows Presentation Foundation(以前的代号为“Avalon”)是 Microsoft 用于 Windows 的统一显示子系统,它通过 WinFX 公开。它由显示引擎和托管代码框架组成。Windows Presentation Foundation 统一了 Windows 创建、显示和操作文档、媒体和用户界面 (UI) 的方式,使开发人员和设计人员可以创建更好的视觉效果、不同的用户体验。Windows Presentation Foundation 发布后,Windows XP、Windows Server 2003 和以后所有的 Windows操作系统版本都可以使用它。
WPF是.Net Framework 3.0
WPF
WPF
里新推出的主打功能之一,加上Vista集成.Net Framework 3.0,改写Winform时代,可谓是影响巨大!WPF是一套API函数库,由.Net FrameWork3.0以上版本类库运行。
WPF是Windows操作系统中一次重大变革,与早期的GDI+/GDI不同。WPF是基于DirectX引擎的,支持GPU硬件加速,在不支持硬件加速时也可以使用软件绘制。高级别的线程绘制可以提高使用者的体验。自动识别显示器分辨率并进行缩放。而Vista就是一个非常典型的例子
                </TextBlock>
            </ScrollViewer>
        </GroupBox>
        <Border Grid.Row="2" Grid.ColumnSpan="2" BorderThickness="1" Margin="5 5" >
            <StackPanel Background="AliceBlue">
                <TextBlock Text="页面布局" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50" Background="AliceBlue" Foreground="Blue"/>
            </StackPanel>
        </Border>
    </Grid>
</Page>

page2.cs

        public Page2()
        {
            InitializeComponent();
            this.Loaded += pageInit;
        }

        private RadioButton[] rb = new RadioButton[5];
        private void pageInit(object sender, RoutedEventArgs e)
        {
            IAddChild container = stkp1;

            for (int i = 0; i < rb.Length; i++)
            {
                rb[i] = new RadioButton();
                rb[i].Name = "rb" + (i+1).ToString();
                rb[i].Content = "选项卡" + i;
                rb[i].Checked += RbChecked;
                container.AddChild(rb[i]);
            }
            rb[0].IsChecked = true;
        }

        private void RbChecked(object sender, RoutedEventArgs e)
        {
            RadioButton rb = sender as RadioButton;
            MessageBox.Show("RadioButton "+ rb.Name +" is checked!");
            switch (rb.Name)
            {
                case "rb1":
                    {
                        image.Source = new BitmapImage(new Uri("/Resources/CC.jpg", UriKind.Relative));
                    }
                    break;
                case "rb2":
                    {
                        image.Source = new BitmapImage(new Uri("/Resources/CC2.jpg", UriKind.Relative));
                    }
                    break;
                case "rb3":
                    {
                        image.Source = new BitmapImage(new Uri("/Resources/CC3.jpg", UriKind.Relative));
                    }
                    break;
                case "rb4":
                    {
                        image.Source = new BitmapImage(new Uri("/Resources/CC4.png", UriKind.Relative));
                    }
                    break;
                case "rb5":
                    {
                        image.Source = new BitmapImage(new Uri("/Resources/CC5.jpg", UriKind.Relative));
                    }
                    break;
                default: { } break;

            }

        }

附录:测试代码
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在 WPF生成多个 DataGrid,可以使用以下步骤: 1. 在 XAML 中创建一个或多个 DataGrid 控件,每一个都需要有一个唯一的名称。例如: ```xml <Grid> <DataGrid Name="grid1" /> <DataGrid Name="grid2" /> </Grid> ``` 2. 在代码中找到这些 DataGrid 控件并设置它们的属性,例如数据源、列和行等。例如: ```csharp private void InitializeDataGrids() { // 设置 grid1 的数据源 grid1.ItemsSource = GetData(); // 添加列到 grid2 grid2.Columns.Add(new DataGridTextColumn() { Header = "Name", Binding = new Binding("Name") }); grid2.Columns.Add(new DataGridTextColumn() { Header = "Age", Binding = new Binding("Age") }); // 添加行到 grid2 var items = new List<Person>() { new Person() { Name = "John", Age = 30 }, new Person() { Name = "Jane", Age = 25 } }; foreach (var item in items) { grid2.Items.Add(item); } } private List<Person> GetData() { // 获取数据 return new List<Person>() { new Person() { Name = "John", Age = 30 }, new Person() { Name = "Jane", Age = 25 }, new Person() { Name = "Tom", Age = 40 } }; } public class Person { public string Name { get; set; } public int Age { get; set; } } ``` 注意,这里的 Person 类是一个简单的模型类,用于演示如何将数据绑定到 DataGrid 控件中。 3. 在窗口或页面的 Loaded 事件中调用 InitializeDataGrids 方法,以便在加载时设置 DataGrid 控件。 ```csharp private void Window_Loaded(object sender, RoutedEventArgs e) { InitializeDataGrids(); } ``` 这样就可以在 WPF 应用程序中生成多个 DataGrid 控件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值