silverlight 加强版GroupBox

silverlight 加强版GroupBox,第1张

概述最近想要修改一下UI界面,发现Silverlight没有原生的GroupBox,于是百度了一下立马就发现了一些共享的很是受用,但是一用发现GroupBox的title必须有背景色颜色来遮挡住border ,这样在多种颜色背景的时候就会很悲催了,于是就有了这个GroupBox。 不废话上图   主要原理就是clip.上代码: /// <summary> /// 分组框 /// </summary>

最近想要修改一下UI界面,发现Silverlight没有原生的GroupBox,于是百度了一下立马就发现了一些共享的很是受用,但是一用发现GroupBox的Title必须有背景色颜色来遮挡住border ,这样在多种颜色背景的时候就会很悲催了,于是就有了这个GroupBox。

不废话上图

 

主要原理就是clip.上代码:

/// <summary>
/// 分组框
/// </summary>
[TemplatePart(name = "PART_header",Type = typeof(FrameworkElement)),TemplatePart(name = "PART_border",Type = typeof(FrameworkElement))]
public class GroupBox : headeredContentControl
{
     private FrameworkElement header;
     private FrameworkElement border;
     public GroupBox()
     {
         this.DefaultStyleKey = typeof(GroupBox);
     }
     public overrIDe voID OnApplyTemplate()
     {
         base.OnApplyTemplate();
    
         this.header = (base.GetTemplateChild("PART_header") as FrameworkElement);
         this.border = (base.GetTemplateChild("PART_border") as FrameworkElement);
         if (this.header != null && this.border != null)
         {
             this.header.Clip = null;
             this.header.SizeChanged+=this.GroupBoxSizeChanged;
             this.border.SizeChanged+=this.GroupBoxSizeChanged;
         }
     }
 
     private voID GroupBoxSizeChanged(object sender,EventArgs e)
     {
         if (this.header != null && this.border != null)
         {
             var geometryGroup = new GeometryGroup();
             PresentationFrameworkCollection<Geometry> geometrys = geometryGroup.Children;
             var rectangleGeometry = new RectangleGeometry
                 {
                     Rect = (new Rect(-1.0,-1.0,this.border.ActualWIDth + 2.0,this.border.ActualHeight + 2.0))
                 };
             geometrys.Add(rectangleGeometry);
             var rect = new Rect(default(Point),new Point(this.header.ActualWIDth,this.header.ActualHeight));
             try
             {
                 Generaltransform generaltransform = this.header.transformToVisual(this.border);
                 rect = generaltransform.transformBounds(rect);
             }
             catch
             {
             }
             PresentationFrameworkCollection<Geometry> geometrys2 = geometryGroup.Children;
             var rectangleGeometry2 = new RectangleGeometry {Rect = rect};
             geometrys2.Add(rectangleGeometry2);
             this.border.Clip=geometryGroup;
         }
     }

<Style targettype="WidgetUi:GroupBox">       <Setter Property="Background" Value="{x:Null}"></Setter>       <Setter Property="borderBrush" Value="#687B8B"></Setter>       <Setter Property="borderThickness" Value="1"></Setter>       <Setter Property="Foreground" Value="#FF000000"/>       <Setter Property="Template">           <Setter.Value>               <ControlTemplate targettype="WidgetUi:GroupBox">                   <GrID>                       <GrID.ColumnDeFinitions>                           <ColumnDeFinition WIDth="6"/>                           <ColumnDeFinition WIDth="auto"/>                           <ColumnDeFinition WIDth="*"/>                           <ColumnDeFinition WIDth="6"/>                       </GrID.ColumnDeFinitions>                       <GrID.RowDeFinitions>                           <RowDeFinition Height="auto"/>                           <RowDeFinition Height="auto"/>                           <RowDeFinition Height="*"/>                           <RowDeFinition Height="6"/>                       </GrID.RowDeFinitions>                       <border x:name="Background" borderBrush="{x:Null}" borderThickness="{TemplateBinding borderThickness}" Background="{TemplateBinding Background}" GrID.ColumnSpan="4" GrID.Column="0" CornerRadius="4" GrID.Row="1" GrID.rowspan="3" />                       <border x:name="PART_header" GrID.Column="1" padding="5 0 5 1" GrID.Row="0" GrID.rowspan="2" >                           <ContentPresenter ContentTemplate="{TemplateBinding headerTemplate}" Content="{TemplateBinding header}" />                       </border>                       <ContentPresenter x:name="Content" GrID.ColumnSpan="2" GrID.Column="1" margin="{TemplateBinding padding}" GrID.Row="2" />                       <border x:name="PART_border" borderBrush="{TemplateBinding borderBrush}" borderThickness="{TemplateBinding borderThickness}" GrID.ColumnSpan="4" CornerRadius="4" IsHitTestVisible="False" margin="1 0 1 1" GrID.Row="1" GrID.rowspan="3"/>                   </GrID>               </ControlTemplate>           </Setter.Value>       </Setter>   </Style>希望对大家有用~

总结

以上是内存溢出为你收集整理的silverlight 加强版GroupBox全部内容,希望文章能够帮你解决silverlight 加强版GroupBox所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1019098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存