zoukankan      html  css  js  c++  java
  • [原]Silverlight两种自定义包含内容(Content)控件的方案

    继承ContentControl可以很方便实现包含内容(Content)的控件,方案一:
    自定义控件代码如下:

        public class DockPanel : ContentControl
        {
            
    public DockPanel()
            {
                
    this.DefaultStyleKey = typeof(DockPanel);
            }
        }

    themes/Generic.xaml代码如下:

        <Style TargetType="local:DockPanel">
            
    <Setter Property="Template">
                
    <Setter.Value>
                    
    <ControlTemplate TargetType="local:DockPanel">
                        
    <Grid>
                            
    <Border>
                                
    <Grid>
                                    
    <ContentPresenter Content="{TemplateBinding Content}" />
                                
    </Grid>
                            
    </Border>
                        
    </Grid>
                    
    </ControlTemplate>
                
    </Setter.Value>
            
    </Setter>
        
    </Style>

    引用页面代码:

    <UserControl x:Class="SilverlightApplication1.Page"
        xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:cinlap
    ="clr-namespace:SilverlightClassLibrary1;assembly=SilverlightClassLibrary1"
        Width
    ="400" Height="300">
        
    <Grid x:Name="LayoutRoot" Background="Yellow" Width="400" Height="300" >          
            
    <cinlap:DockPanel>
                
    <cinlap:DockPanel.Content>
                    
    <StackPanel Background="Red"/>
                
    </cinlap:DockPanel.Content>
            
    </cinlap:DockPanel>
        
    </Grid>  
    </UserControl>

    方案二:

    自定义控件:
        public class MyContentControl : Control
        {
            
    public static readonly DependencyProperty ContentPanelProperty =
                DependencyProperty.Register(
    "ContentPanel"typeof(Panel), typeof(MyContentControl), null);

            
    public MyContentControl()
            {
                
    this.DefaultStyleKey = typeof(MyContentControl);
            }

            
    public Panel ContentPanel
            {
                
    get
                {
                    
    return (Panel)this.GetValue(ContentPanelProperty);
                }
                
    set
                {
                    
    this.SetValue(ContentPanelProperty, value);
                }
            }
        }

    themes/Generic.xaml代码如下:
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml" 
                        xmlns:local
    ="clr-namespace:SilverlightClassLibrary1" >
        
    <Style TargetType="local:MyContentControl">
            
    <Setter Property="Template">
                
    <Setter.Value>
                    
    <ControlTemplate TargetType="local:MyContentControl">
                        
    <Grid>
                            
    <Border>
                                
    <Grid>                                
                                    
    <ContentPresenter Content="{TemplateBinding ContentPanel}"/>
                                
    </Grid>
                            
    </Border>
                        
    </Grid>
                    
    </ControlTemplate>
                
    </Setter.Value>
            
    </Setter>
        
    </Style>
    </ResourceDictionary>

    引用页面代码:
        <Grid x:Name="LayoutRoot" Background="Yellow" Width="400" Height="300" >          
            
    <cinlap:MyContentControl>
                
    <cinlap:MyContentControl.ContentPanel>
                    
    <StackPanel Background="Red"/>
                
    </cinlap:MyContentControl.ContentPanel>
            
    </cinlap:MyContentControl>
        
    </Grid>

    补充:
    Silverlight自带的内容控件中一般使在ContentPresenter时绑定了以下两个属性:

    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"

    经试验,定义了这两个属性后,内容元素不能自动缩放,所以在自定义Content控件时,可视自已实际应用运用这两个属性。

  • 相关阅读:
    github新手使用指南
    Nacos(五):多环境下如何“读取”Nacos中相应的配置
    Nacos(四):SpringCloud项目中接入Nacos作为配置中心
    Nacos:Nacos与OpenFeign的对接使用
    解决IDEA的maven项目 添加依赖后Reimport无反应
    SpringCloud项目中接入Nacos作为注册中心
    Nacos 使用
    SpringCloud教程 | 第十三篇: 断路器聚合监控(Hystrix Turbine)
    C# Task总结(Action,Func,委托)
    C# Task总结(异步操作+并行)
  • 原文地址:https://www.cnblogs.com/think8848/p/1529776.html
Copyright © 2011-2022 走看看