载于:

http://www.cnblogs.com/chenxizhang/archive/2011/09/22/2185414.html

很多互联网上的资料,但是实际的开发效果差死了,防止一个组件,跑来跑去,烦。而且效果差,我改不出来,水平差。

不知哪位大虾修改一下,给我,我想一个简单实际的东西最好。研究那些东西也不赚钱;

 

关于边框线,真是麻烦,互联网上的改装都不能用,效果也差。真是不知道该说什么;

最后我综合意见,本着实战的原则,最后修改了一下;

 

View Code
<Border  BorderThickness="2,2,1,2" BorderBrush="#FFA0B3C6" Height="90" Width="560">
        <Grid Background="White" Name="GridMain" ShowGridLines="False">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="66" />
            <ColumnDefinition Width="81" />
            <ColumnDefinition Width="83" />
            <ColumnDefinition Width="83" />
            <ColumnDefinition Width="84" />
            <ColumnDefinition Width="87" />
            <ColumnDefinition Width="116*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="30" />
            <RowDefinition Height="30" />
            <RowDefinition Height="30" />
        </Grid.RowDefinitions>
        
        <TextBlock FlowDirection="LeftToRight" Grid.Column="1" HorizontalAlignment="Stretch" Name="textBlock2" Text="H1" TextAlignment="Center" TextTrimming="None" TextWrapping="Wrap" VerticalAlignment="Center" />

        <TextBlock Grid.Row="2" Grid.RowSpan="2" HorizontalAlignment="Stretch" Name="textBlock5" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Stretch" FlowDirection="LeftToRight">结果<LineBreak />(B)</TextBlock>
        <TextBlock Grid.Row="1" HorizontalAlignment="Stretch" Name="textBlock9" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Stretch" FlowDirection="LeftToRight">结果<LineBreak />(A)</TextBlock>
        <TextBlock Grid.Column="6" HorizontalAlignment="Stretch" Name="textBlock12" Text="合计" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" />
        <TextBlock Grid.Column="3" HorizontalAlignment="Stretch" Name="textBlock1" Text="结果3" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" />
        <TextBlock Grid.Column="4" HorizontalAlignment="Stretch" Name="textBlock4" Text="结果4" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" />
        <TextBlock Grid.Column="5" HorizontalAlignment="Stretch" Name="textBlock6" Text="结果5" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" />
        
            <TextBox Name="textBox2" Grid.Column="1" Grid.Row="1" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" />
        
        <TextBox Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" Name="textBox3" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" />
        <TextBox Grid.Column="2" Grid.Row="1" HorizontalAlignment="Stretch" Name="textBox1" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" />
        <TextBox Grid.Column="2" Grid.Row="2" Grid.RowSpan="2" HorizontalAlignment="Stretch" Name="textBox4" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" />
        <TextBox Grid.Column="3" Grid.Row="1" HorizontalAlignment="Stretch" Name="textBox5" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" />
        <TextBox Grid.Column="3" Grid.Row="2" Grid.RowSpan="2" HorizontalAlignment="Stretch" Name="textBox6" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" />
        <TextBox Grid.Column="4" Grid.Row="1" HorizontalAlignment="Stretch" Name="textBox7" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" />
        <TextBox Grid.Column="4" Grid.Row="2" HorizontalAlignment="Stretch" Name="textBox8" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" />
        <TextBox Grid.Column="5" Grid.Row="1" HorizontalAlignment="Stretch" Name="textBox9" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" Foreground="White" Background="White">
            <TextBox.BorderBrush>
                <LinearGradientBrush>
                    <GradientStop Color="#FFA3AEB9" Offset="0" />
                    <GradientStop Color="#FF8399A9" Offset="0.375" />
                    <GradientStop Color="#FF718597" Offset="0.375" />
                    <GradientStop Color="Black" Offset="1" />
                </LinearGradientBrush>
            </TextBox.BorderBrush>
        </TextBox>
        <TextBox Grid.Column="5" Grid.Row="2" HorizontalAlignment="Stretch" Name="textBox10" VerticalAlignment="Stretch" BorderThickness="0" Padding="2,4" Foreground="White" Background="White">
            <TextBox.BorderBrush>
                <LinearGradientBrush>
                    <GradientStop Color="#FFA3AEB9" Offset="0" />
                    <GradientStop Color="#FF8399A9" Offset="0.375" />
                    <GradientStop Color="#FF718597" Offset="0.375" />
                    <GradientStop Color="Black" Offset="1" />
                </LinearGradientBrush>
            </TextBox.BorderBrush>
        </TextBox>
        <c1:C1FlexGrid Grid.Column="4" Grid.Row="2" HorizontalAlignment="Left" Margin="76,100,0,0" Name="c1FlexGrid1" VerticalAlignment="Top" Grid.ColumnSpan="3" Height="35" Width="171" />
        <TextBox BorderThickness="0" HorizontalAlignment="Stretch" Name="textBox11" Padding="2,4" VerticalAlignment="Center" Grid.Column="6" Grid.Row="1" Grid.RowSpan="2" />
        <TextBlock FlowDirection="LeftToRight" HorizontalAlignment="Stretch" Margin="6,7,0,7" Name="textBlock3" Text="结果1" TextAlignment="Center" TextTrimming="None" TextWrapping="Wrap" VerticalAlignment="Center" Grid.Column="2" />
        <TextBlock FlowDirection="LeftToRight" HorizontalAlignment="Stretch" Margin="6,7,0,0" Name="textBlock7" Text="\" TextAlignment="Center" TextTrimming="None" TextWrapping="Wrap" VerticalAlignment="Center" Height="23" />
    </Grid>
    </Border>

 

 

 

      ////A0B3C6
        public static SolidColorBrush _BorderBrush = new SolidColorBrush(ConvertFromString("#FFA0B3C6"));
        public static double _BorderThickness = 1;

        /// <summary>
        
/// 生成边框
        
/// </summary>
        public static void ShowBorder(Grid gd)
        {
            if (gd == null)
            {
                return;
            }

            clearBorder(gd);

            SolidColorBrush BorderColorBrush = _BorderBrush;
            double BorderThickness = _BorderThickness;

            //CreateBorder(gd, BorderColorBrush, BorderThickness);
            CreateBorder2(gd, BorderColorBrush, BorderThickness);
        }

        /// <summary>
        
/// 生成边框
        
/// </summary>
        public static void ShowBorder(Grid gd, SolidColorBrush BorderColorBrush, double BorderThickness)
        {
            if (gd == null)
            {
                return;
            }

            clearBorder(gd);

            CreateBorder2(gd, BorderColorBrush, BorderThickness);

        }

        private static void clearBorder(Grid gd)
        {
            for (int i = gd.Children.Count - 1; i >= 0; i--)
            {
                if (gd.Children[i].ToString() == "System.Windows.Controls.Border")
                {
                    Border re = gd.Children[i] as Border;
                    if (/*(re.Tag!=null)&&*/ (re.Tag.ToString() == "autoBorder"))
                    {

                        re = null;
                        gd.Children.RemoveAt(i);
                    }
                }
            }

        }

        private static void CreateBorder2(Grid gd, SolidColorBrush borderBrush, double borderThickness)
        {
            //这种做法自动将控件移动到Border里面来
            
            var controls = gd.Children;
            var count = controls.Count;

            for ( int i =0; i <count; i++ )
            {
                var item = controls[ i ] as FrameworkElement;
                var border = new Border()
                {
                    BorderBrush = borderBrush,

                    BorderThickness = new Thickness(00, borderThickness, borderThickness),
                    //BorderThickness = new Thickness(1),
                    Tag="autoBorder"
                };
                
                //不同的位置设置不同的边框线
                
                var row = Grid.GetRow(item);
                var column = Grid.GetColumn(item);
                var rowspan = Grid.GetRowSpan(item);
                var columnspan = Grid.GetColumnSpan(item);

                Grid.SetRow(border, row);
                Grid.SetColumn(border, column);
                Grid.SetRowSpan(border, rowspan);
                Grid.SetColumnSpan(border, columnspan);


                gd.Children.RemoveAt(i);
                border.Child = item;
                gd.Children.Insert(i, border);

            }

            
            
        }
/// <summary>
        
/// 把字符串转成颜色 #A0B3C6
        
/// </summary>
        
/// <param name="colorString"></param>
        
/// <returns></returns>
        public static Color ConvertFromString(string colorString)
        {
            Color color;
            try
            {
                Line line = (Line)XamlReader.Load("<Line xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Fill=\"" + colorString + "\" />");
                color = (Color)line.Fill.GetValue(SolidColorBrush.ColorProperty);
            }
            catch
            {
                color = new Color();
            }

            return color;
        }

最终结果:

Silverlight的Grid添加边框线 【改编】

不错吧,就这样了,实战关键,没有空研究。

各位有空再改装。不过打算使用ComponetOne,Radcontrols第三方组件啥的,就是ComponetOne提供了一个,结果难用的要死,写一大堆,而且灵活度差,因为FlexGrid不是可设计型容器,麻烦,不够实际。

 

 今天开始优化了一下,对内部表格进行了布局处理。各位只要复制就可以使用;以下就是源代码,本人有代码洁癖,无论做什么事,都要

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace RIAPlatform.Common
{
    /// <summary>
    
/// 
    
/// </summary>
    public static class GridLayoutWrapper
    {
        //自定义属性
        private static string BorderTag="autoBorder";//边框组件的Tag标识

         /// <summary>
        
/// 清除表格容器所有的边框Border组件
        
/// </summary>
        
/// <param name="grid"></param>
        private static void ClearBorder(Grid grid)
        {
            for (int i = grid.Children.Count - 1; i >= 0; i--)
            {
                if (grid.Children[i].ToString() == "System.Windows.Controls.Border")
                {
                    Border re = grid.Children[i] as Border;
                    if (/*(re.Tag!=null)&&*/ (re.Tag.ToString() ==BorderTag))
                    {

                        re = null;
                        grid.Children.RemoveAt(i);
                    }
                }
            }

        }

        /// <summary>
        
/// 创建表格内部的边框类
        
/// </summary>
        
/// <param name="grid"></param>
        
/// <param name="borderBrush"></param>
        private static void CreateBorder(Grid grid, SolidColorBrush borderBrush,bool isAutoLayout=true)
        {
            //这种做法自动将控件移动到Border里面来
            var controls = grid.Children;
            var count = controls.Count;

            for ( int i = 0;i < count; i ++ )
            {
                var item = controls[ i ] as FrameworkElement;

                var row = Grid.GetRow(item);
                var column = Grid.GetColumn(item);
                var rowspan = Grid.GetRowSpan(item);
                var columnspan = Grid.GetColumnSpan(item);

                var border = new Border()
                {
                    BorderBrush = borderBrush,
                    //BorderThickness = new Thickness(0, 0, 1, 1),
                    Tag = BorderTag,
                };

                
                //根据行的位置设置边框线
                if ( row == grid.RowDefinitions.Count - 1 )
                {

                    border.BorderThickness = new Thickness(0010);
                }
                else
                {
                    border.BorderThickness = new Thickness(0011);
                }

                //设置边框的位置
                Grid.SetRow(border, row);
                Grid.SetColumn(border, column);
                Grid.SetRowSpan(border, rowspan);
                Grid.SetColumnSpan(border, columnspan);

                //设置表格包含的控件的布局方式为对齐
                if ( isAutoLayout )
                {
                    item.Width = Double.NaN;//Auto
                    if ( item.Tag == null )
                        item.Height = Double.NaN;//Auto

                    item.HorizontalAlignment = HorizontalAlignment.Stretch;
                    item.VerticalAlignment = VerticalAlignment.Center;
                    item.Margin = new Thickness(1010);

                    //关于文本控件的布局
                    if ( item is TextBlock )
                    {
                        ( (TextBlock)item ).TextAlignment = TextAlignment.Center;
                        ( (TextBlock)item ).TextWrapping = TextWrapping.Wrap;

                    }

                    if ( item is Control )
                    {
                        ( (Control)item ).BorderThickness = new Thickness(0000);
                        ( (Control)item ).FontWeight = FontWeights.Bold;
                    }

                }

                //将布局到Grid的元素移除,重新放置到Border里面
                grid.Children.RemoveAt(i);
                border.Child = item;
                grid.Children.Insert(i, border);

            }
        }


        /// <summary>
        
/// 设置边框
        
/// </summary>
        
/// <param name="border"></param>
        
/// <param name="grid"></param>
        public static void ShowBorder(Border border, Grid grid, bool isAutoLayout = true)
        {
            if ( border == null ) return;
            if ( grid == null ) return;

            ClearBorder(grid);
            //设置外边框的样式,保证边框的样式表格的颜色相同;
            Color color=(Color)border.BorderBrush.GetValue(SolidColorBrush.ColorProperty);
            SolidColorBrush borderColorBrush = new SolidColorBrush(color);

            CreateBorder(grid, borderColorBrush,isAutoLayout);
        }

    }
}

严格

相关文章:

  • 2021-10-11
  • 2021-09-11
  • 2021-12-05
  • 2022-02-10
  • 2021-07-10
  • 2021-12-09
  • 2022-12-23
  • 2021-09-05
猜你喜欢
  • 2021-09-04
  • 2021-12-29
  • 2021-11-16
  • 2022-01-11
  • 2021-11-08
  • 2021-05-27
相关资源
相似解决方案