C# Revit二次开发 WPF界面,动态(界面初始化时)在viewmodel中向tabcontral添加tabitem,并添加控件, 读取数据

MainWindow.xaml中

<ui:CCWindow x:Class="Bhidi.Revit.TabItemTest.Views.MainWindow"
             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:Bhidi.Revit.TabItemTest.Views"
        
             xmlns:hc="https://handyorg.github.io/handycontrol"
             xmlns:ui="clr-namespace:CC.Style;assembly=CC.Style" 
             xmlns:viewmodel="clr-namespace:Bhidi.Revit.TabItemTest.ViewModel" 
             mc:Ignorable="d" 
             d:DataContext="{d:DesignInstance Type=viewmodel:MainViewModel}"
             Title="测试"
             MinHeight="530" MinWidth="534" 
             Height="530" Width="534"
             hc:IconElement.Height="20"
             >
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml" />
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml" />
                <ResourceDictionary Source="pack://application:,,,/CC.Style;component/CCTheme.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <Style TargetType="{x:Type TabControl}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TabControl}">
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
                                    <TabPanel x:Name="HeaderPanel" Panel.ZIndex="1" Margin="2,2,2,0" IsItemsHost="True" KeyboardNavigation.TabIndex="1" Background="Transparent"/>
                                </ScrollViewer>
                                <ContentPresenter x:Name="PART_SelectedContentHost" Grid.Row="1" ContentSource="SelectedContent" Margin="0,2"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

        </ResourceDictionary>
        
    </Window.Resources>

    <Viewbox Stretch="UniformToFill">
        <Canvas Height="530"  Width="534" >
            <Grid Height="530"  Width="534">
                <Grid.RowDefinitions >
                    <RowDefinition Height="auto"></RowDefinition>
                    <RowDefinition  Height="auto"></RowDefinition>
                    <RowDefinition  Height="auto"></RowDefinition>
                    <RowDefinition  Height="auto"></RowDefinition>
                </Grid.RowDefinitions>
                <Grid Margin="8,0">
                    <StackPanel>
                        <StackPanel Orientation="Horizontal" Margin="0,5">
                            <Image Source="pack://application:,,,/Bhidi.Revit;component/Resources/Rad_Blue.png" Style="{StaticResource RadBlueImageSytle}"/>
                            <TextBlock Margin="6,4">
                           <Run Text="基础布局" />
                            </TextBlock>
                        </StackPanel>
                        <Border  Style="{StaticResource CCBorder}" Background="White">
                            <Grid Margin="7,0" Height="200">
                                <TabControl x:Name="myTabControl1" ItemsSource="{Binding Items}"  SelectedItem="{Binding SelectedTab}"  >
                                    

                                </TabControl>


                            </Grid>
                        </Border>
                    </StackPanel>
                </Grid >
                <Grid Margin="8,0" Grid.Row="1">
                    <StackPanel>
                        <StackPanel Orientation="Horizontal" Margin="0,5">
                            <Image Source="pack://application:,,,/Bhidi.Revit;component/Resources/Rad_Blue.png" Style="{StaticResource RadBlueImageSytle}"/>
                            <TextBlock Margin="6,4">
           <Run Text="基础布局" />
                            </TextBlock>
                        </StackPanel>
                        <Border  Style="{StaticResource CCBorder}" Background="White">
                            <Grid Margin="7,0" Height="200">
                                <TabControl  x:Name="myTabControl2">
                                    <TabItem Header="测试1">
                                        <StackPanel>
                                            <Button Content="测试点我" HorizontalAlignment="Left" VerticalAlignment="Top"  Command="{Binding Button_Click}"></Button>
                                            <TextBox x:Name="textBoxTest1" Background="Red" BorderThickness="3" BorderBrush="Green" Width="50" HorizontalAlignment="Left" Text="{Binding TextBoxTest}" ></TextBox>
                                        </StackPanel>
                                    </TabItem>
                                    <TabItem Header="测试2"></TabItem>


                                </TabControl>


                            </Grid>
                        </Border>
                    </StackPanel>
                </Grid >

                <Grid Grid.Row="3" Margin="8,16">

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="1.5*"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <Grid HorizontalAlignment="Left" >
                        <Image Source="pack://application:,,,/Bhidi.Revit;component/Resources/公司Logo.png" />
                    </Grid>
                    <StackPanel Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Right" >
                        <Button Content="生成轴网" Command="{Binding CreatModel}" Style="{StaticResource MessageBoxPrimaryButtonStyle}"/>
                        <Button Click="CloseWindow" Content="取消 (Esc)" IsCancel="True" Style="{StaticResource MessageBoxButtonStyle}"  Margin="8,0,0,0"/>
                    </StackPanel>
                </Grid>
            </Grid>
        </Canvas>
    </Viewbox>
</ui:CCWindow>

MainWindow.xaml.cs中

using Autodesk.Revit.DB;
using CC.Style;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Bhidi.Revit.TabItemTest.Views
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : CCWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new ViewModel.MainViewModel();
            ViewModel.MainViewModel.Window = this;
        }

        
    }
}

MainViewModel中

using Autodesk.Revit.DB.Electrical;
using Bhidi.Revit.TabItemTest.Views;
using CC.Utils.Models;
using FilterTreeControlWPF;
using GalaSoft.MvvmLight.Command;
using NPOI.OpenXmlFormats.Wordprocessing;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Drawing.Text;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Xaml;

namespace Bhidi.Revit.TabItemTest.ViewModel
{
    public class MainViewModel:CCViewModelBase
    {
        public static Window Window { get; set; } 
        public MainViewModel() 
        {
            Init();
        }
        private void Init()
        {
            TextBoxTest = "测试你";

            int unitNumber = 100;
            for (int i = 1; i <= unitNumber; i+=2)
            {
                Items.Add(new TabItem() { Header = $"{i}~{i+1}机组室"});
            }

            for (int i =0;i<items.Count();i++)
            {
                StackPanel stackPanel = new StackPanel();

                Button button = new Button();
                button.Content = "Cilck Me";
                button.HorizontalAlignment = HorizontalAlignment.Left;
                button.VerticalAlignment = VerticalAlignment.Top;
                button.Click += NewButton_Click;

                TextBox textBox = new TextBox();
                textBox.HorizontalAlignment = HorizontalAlignment.Left;
                textBox.VerticalAlignment = VerticalAlignment.Top;
                textBox.Text = TextBoxTest;
                textBox.BorderThickness = new Thickness(5);
                textBox.Background = new SolidColorBrush(Colors.Red);
                textBox.BorderBrush = new SolidColorBrush(Colors.Green);
                textBox.Margin = new Thickness(50,5,5,5);
                textBox.Width = 50;
                textBox.Name = $"myTextbox{i}";


                stackPanel.Children.Add(button);
                stackPanel.Children.Add(textBox);

                items[i].Content = stackPanel;




            }



            
        }
        private ObservableCollection<TabItem> items = new ObservableCollection<TabItem>();
        public ObservableCollection<TabItem> Items
        {
            get { return items; }
            set
            {
                items = value;
                RaisePropertyChanged(nameof(Items));
            }
        }

        
        private void NewButton_Click(object sender, RoutedEventArgs e)
        {
            // Button的点击事件处理
            MessageBox.Show("你还真点我!");
            //MessageBox.Show(TextBoxTest);


            if (Window !=null)
            {
                var view = (MainWindow)Window;
                TabItem selTabItem = view.myTabControl1.SelectedItem as TabItem;
                int index = view.myTabControl1.Items.IndexOf(selTabItem);
                //MessageBox.Show(index.ToString());

                var panel = items[index].Content as Panel;
                var childs = panel.Children;

                foreach (var child in childs)
                {
                    if (child is TextBox textBox && textBox.Name == $"myTextbox{index}")
                    {
                        MessageBox.Show(textBox.Text);
                    }
                }




            }



        }

        private RelayCommand button_Click;
        public ICommand Button_Click
        {
            get
            {
                if(button_Click == null)
                {
                    button_Click = new RelayCommand(PerformButton_Click);
                }
                return button_Click;
            }
        }

        private void PerformButton_Click()
        {
            


            MessageBox.Show(TextBoxTest);
        }

        private string textBoxTest;

        public string TextBoxTest { get => textBoxTest; set => Set(ref textBoxTest, value); }



    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值