using System.Collections.Generic;
using System.Linq;
using System.Text;
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 WpfApplication1
{
/// <summary>
/// UserControl1.xaml 的交互逻辑
/// </summary>
public partial class UserControl1 : UserControl
{
ScrollViewer myScrollViewer = new ScrollViewer();
GridColumn gridColumn1 = new GridColumn();
GridColumn gridColumn2 = new GridColumn();
public Grid myGrid = new Grid();
public UserControl1()
{
InitializeComponent();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
// Define a ScrollViewer
myScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
myGrid.ColumnDefinitions.Add(new ColumnDefinition());
myGrid.ColumnDefinitions.Add(new ColumnDefinition());
myGrid.RowDefinitions.Add(new RowDefinition());
// Add the StackPanel as the lone Child of the Border
myScrollViewer.Content = myGrid;
gridColumn1.controlTemplateRight = (ControlTemplate)(this.Resources["ButtonRight"]);
gridColumn1.controlTemplateLeft = (ControlTemplate)(this.Resources["ButtonLeft"]);
gridColumn1.Init();
gridColumn2.controlTemplateRight = (ControlTemplate)(this.Resources["ButtonRight"]);
gridColumn2.controlTemplateLeft = (ControlTemplate)(this.Resources["ButtonLeft"]);
gridColumn2.Init();
Grid.SetColumn(gridColumn1.myGrid, 0);
Grid.SetRow(gridColumn1.myGrid, 0);
myGrid.Children.Add(gridColumn1.myGrid);
Grid.SetColumn(gridColumn2.myGrid, 1);
Grid.SetRow(gridColumn2.myGrid, 0);
myGrid.Children.Add(gridColumn2.myGrid);
// Add the Border as the Content of the Parent Window Object
this.Content = myScrollViewer;
}
//private void button1_Click(object sender, RoutedEventArgs e)
//{
// gridColumn.myGrid.ColumnDefinitions.Add(new ColumnDefinition());
// gridColumn.myGrid.Width += width;
// gridColumn.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());
//}
}
public class GridColumn
{
public Grid myGridTitle = new Grid();
public Grid myGrid = new Grid();
public double width = 0;
public ControlTemplate controlTemplateLeft;
public ControlTemplate controlTemplateRight;
public GridColumn()
{
}
public void Init()
{
width = 60;
myGrid.Width = 60;
myGrid.Height = 320;
myGrid.HorizontalAlignment = HorizontalAlignment.Left;
myGrid.VerticalAlignment = VerticalAlignment.Top;
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());
myGridTitle.Width = myGrid.Width;
myGridTitle.Height = 30;
SetTitle();
SetBorder();
TextBox text = new TextBox();
text.Margin = new Thickness(10, 20, 20, 5);
text.Height = 150;
Grid.SetColumn(text, 0);
Grid.SetRow(text, 1);
Grid.SetRowSpan(text, 2);
text.Text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\naaaaaaaaaaaaaaaf";
myGrid.Children.Add(text);
// Add Layout control
myGrid.HorizontalAlignment = HorizontalAlignment.Left;
myGrid.VerticalAlignment = VerticalAlignment.Top;
}
private void SetTitle()
{
Grid myGridTitleTemp = new Grid();
Button button1 = new Button();
button1.Template = controlTemplateRight;
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 = controlTemplateLeft;
button2.Click += button2_Click;
button2.Background = Brushes.Red;
button2.Width = 30;
Grid.SetColumn(button2, 1);
Grid.SetRow(button2, 0);
myGridTitleTemp.ColumnDefinitions.Add(new ColumnDefinition());
ColumnDefinition ColumnDefinition1 = new ColumnDefinition();
ColumnDefinition1.Width = GridLength.Auto;
myGridTitleTemp.ColumnDefinitions.Add(ColumnDefinition1);
ColumnDefinition ColumnDefinition2 = new ColumnDefinition();
ColumnDefinition2.Width = GridLength.Auto;
myGridTitleTemp.ColumnDefinitions.Add(ColumnDefinition2);
myGridTitleTemp.RowDefinitions.Add(new RowDefinition());
myGridTitleTemp.Children.Add(button1);
myGridTitleTemp.Children.Add(button2);
Grid.SetColumn(myGridTitleTemp, 0);
Grid.SetRow(myGridTitleTemp, 0);
var border = new Border() { BorderBrush = new SolidColorBrush(Colors.Gray), BorderThickness = new Thickness(1) };
Grid.SetRow(border, 0);
Grid.SetColumn(border, 0);
Grid.SetColumnSpan(border, 3);
border.Child = myGridTitleTemp;
myGridTitle.Children.Add(border);
myGrid.Children.Add(myGridTitle);
}
private void SetBorder()
{
//确定行和列数
var rows = myGrid.RowDefinitions.Count;
var columns = myGrid.ColumnDefinitions.Count;
//每个格子添加一个Border进去
for (int i = 1; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
var border = new Border() { BorderBrush = new SolidColorBrush(Colors.Gray), BorderThickness = new Thickness(1) };
Grid.SetRow(border, i);
Grid.SetColumn(border, j);
myGrid.Children.Add(border);
}
}
}
private void SetBorder(int column)
{
//确定行和列数
var rows = myGrid.RowDefinitions.Count;
var columns = myGrid.ColumnDefinitions.Count;
//每个格子添加一个Border进去
for (int i = 1; i < rows; i++)
{
var border = new Border() { BorderBrush = new SolidColorBrush(Colors.Gray), BorderThickness = new Thickness(0, 0, 1, 0.5) };
Grid.SetRow(border, i);
Grid.SetColumn(border, column);
myGrid.Children.Add(border);
}
}
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());
SetBorder(myGrid.ColumnDefinitions.Count() - 1);
}
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());
}
}
}
<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>