自定义控件模板,不用依赖属性---------------------WPF

本文介绍了如何在WPF应用中通过资源文件定义控件模板,并讨论了在获取模板中控件实例时遇到的问题及解决方案。通过案例演示了模板的创建过程,包括模板类的定义、事件绑定以及页面上的应用。文章还强调了获取模板中控件实例的间接方式,即通过事件触发。最后,提供了一个详细的示例代码帮助读者理解整个流程。

我觉得用依赖属性的方法来写个控件模板,看起来太乱,不好看。。所以,在网上无意中找到了一个给资源文件定义一个类的方法

1.资源文件中

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    x:Class="WpfApplication1.Class1"
                    >
               <!--注意这个x:Class-->
    <ControlTemplate x:Key="Mbutton2" TargetType="Button">
        <Border Height="30" Width="50" Margin="10,0,0,0" >
            <Button x:Name="woshini" x:Uid="woshini"  Content="nihao"  Click="nihaos"></Button>
        </Border>
    </ControlTemplate>
</ResourceDictionary>

2.后台类

namespace WpfApplication1
{
    //这里必须是有partial
    partial class Class1 : ResourceDictionary
    {

      private static void NormalBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
      {
          Button ditem = d as Button;
          ditem.OnApplyTemplate();
      }
        public Class1()
        {
            InitializeComponent();
          
            int i = 0;
        }
        public void nihaos(object sender, RoutedEventArgs e)
        {            //省去处理,如果显示,表明调用成功。      
            MessageBox.Show("你成功了!");
            Button bt = sender as Button;
         
           
        }
    }
}

3.页面调用

  <Window.Resources>
        <!--还是得引用-->
        <ResourceDictionary >
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/WpfApplication1;component/Dictionary1.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

    </Window.Resources>
    <Grid>
        <Button Template="{StaticResource Mbutton2}"></Button>
    </Grid>

这样就可以完成了。但是有个比较麻烦的问题,,我想获取模板中某个控件的实例对象的时候不能主动的去获取。。。只能等那个对象触发某个事件的时候我才能记下这个控件,和控件的对象

转载于:https://www.cnblogs.com/xiaoleye/p/4977695.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值