wpf grid 表格 标题带三角形按钮控制列数 子控件位置不定

<UserControl x:Class="WpfApplication1.UserControl1"
             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"
             mc:Ignorable="d"
             d:DesignHeight="439" d:DesignWidth="437" Loaded="UserControl_Loaded">
    
    <UserControl.Resources>
        <ControlTemplate x:Key="ButtonLeft" TargetType="{x:Type Button}">
            <Grid>
                <Polygon x:Name="ButtonPolygon" Stretch="Fill" Points="100,100 100,0 0,50" Stroke="White" StrokeThickness="2">
                    <Polygon.Fill>
                        <SolidColorBrush Color="Red" Opacity="0.8"/>
                    </Polygon.Fill>
                </Polygon>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="ButtonPolygon" Property="Fill" Value="Black"></Setter>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="ButtonPolygon" Property="Fill" Value="Gray"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

        <ControlTemplate x:Key="ButtonRight" TargetType="{x:Type Button}">
            <Grid>
                <Polygon x:Name="ButtonPolygon" Stretch="Fill" Points="0,0 0,100 100,50" Stroke="White" StrokeThickness="2">
                    <Polygon.Fill>
                        <SolidColorBrush Color="Gray" Opacity="0.8"/>
                    </Polygon.Fill>
                </Polygon>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="ButtonPolygon" Property="Fill" Value="Black"></Setter>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="ButtonPolygon" Property="Fill" Value="Blue"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </UserControl.Resources>    

</UserControl>





    public partial class UserControl1 : UserControl
    {
        Grid myGridTitle = new Grid();
        Grid myGrid = new Grid();
        ScrollViewer myScrollViewer = new ScrollViewer();
        double width = 0;

        public UserControl1()
        {
            InitializeComponent();
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            width = this.Width - 20;
            myGrid.Width = this.Width - 20;
            myGrid.Height = this.Height-20;
            myGrid.HorizontalAlignment = HorizontalAlignment.Left;
            myGrid.VerticalAlignment = VerticalAlignment.Top;
            myGrid.ShowGridLines = true;

            myGrid.ColumnDefinitions.Add(new ColumnDefinition());
            myGrid.RowDefinitions.Add(new RowDefinition());
            myGrid.RowDefinitions.Add(new RowDefinition());
            myGrid.RowDefinitions.Add(new RowDefinition());
            myGrid.RowDefinitions.Add(new RowDefinition());

            Button button1 = new Button();
            button1.Template = (ControlTemplate)(this.Resources["ButtonRight"]);
            button1.Click += button1_Click;
            
            button1.Background = Brushes.Red;
            button1.Width = 30;

            Grid.SetColumn(button1, 2);
            Grid.SetRow(button1, 0);


            Button button2 = new Button();
            button2.Template = (ControlTemplate)(this.Resources["ButtonLeft"]);
            button2.Click += button2_Click;

            button2.Background = Brushes.Red;
            button2.Width = 30;

            Grid.SetColumn(button2, 1);
            Grid.SetRow(button2, 0);


            myGridTitle.Width = myGrid.Width;
            myGridTitle.Height = 30;

            myGridTitle.ColumnDefinitions.Add(new ColumnDefinition());
            ColumnDefinition ColumnDefinition1 = new ColumnDefinition();
            ColumnDefinition1.Width = GridLength.Auto;
            myGridTitle.ColumnDefinitions.Add(ColumnDefinition1);
            ColumnDefinition ColumnDefinition2 = new ColumnDefinition();
            ColumnDefinition2.Width = GridLength.Auto;
            myGridTitle.ColumnDefinitions.Add(ColumnDefinition2);
            myGridTitle.RowDefinitions.Add(new RowDefinition());

            myGridTitle.Children.Add(button1);
            myGridTitle.Children.Add(button2);

            Grid.SetColumn(myGridTitle, 0);
            Grid.SetRow(myGridTitle, 0);

            myGrid.Children.Add(myGridTitle);

            TextBox text = new TextBox();
            text.Margin = new Thickness(10, 80, 0, 0);
            text.Height = 150;
            Grid.SetColumn(text, 0);
            Grid.SetRow(text, 1);
            Grid.SetRowSpan(text, 2);
            text.Text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\naaaaaaaaaaaaaaaf";
            myGrid.Children.Add(text);

            // Define a ScrollViewer
            myScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;

            // Add Layout control
            myGrid.HorizontalAlignment = HorizontalAlignment.Left;
            myGrid.VerticalAlignment = VerticalAlignment.Top;

            // Add the StackPanel as the lone Child of the Border
            myScrollViewer.Content = myGrid;

            // Add the Border as the Content of the Parent Window Object
            this.Content = myScrollViewer;
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            myGrid.ColumnDefinitions.Add(new ColumnDefinition());
            myGrid.Width += width;
            myGridTitle.Width = myGrid.Width;

            Grid.SetColumnSpan(myGridTitle, myGrid.ColumnDefinitions.Count());
            myScrollViewer.ScrollToRightEnd();
        }


        private void button2_Click(object sender, RoutedEventArgs e)
        {
            myGrid.ColumnDefinitions.RemoveAt(myGrid.ColumnDefinitions.Count() - 1);

            myGrid.Width -= width;
            myGridTitle.Width = myGrid.Width;

            Grid.SetColumnSpan(myGridTitle, myGrid.ColumnDefinitions.Count());
        }

    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值