当前位置:编程学习 > C#/ASP.NET >>

WPF 控件的xaml中的定义ControlTemplate内容,在该控件,Remove与Add之后,该控件的ControlTemplate重置的问题

如题“WPF 控件的xaml中的定义ControlTemplate内容,在该控件,Remove与Add之后,该控件的ControlTemplate重置的问题”

我对WPF不是很熟悉,才刚接触;
我目前写了一个比较多的测试项目;
做到一半测试时,发现有问题:

续我这个贴子,没人回答,我才继续发问题的,唉:
 WPF *.xaml中的ControlTemplate如何写成过程式代码(*.cs)

我的测试项目:
MyWpfTest.zip

问题是这样的描述:
我把一个自定义的控件,添加到:Canvas,再从Canvas删除中,再添加回Canvas,发现我之前对该控件设置的文本内容。。。子控件显示样子,都会还原到,*.xaml定义的ControlTemplate的样子,像是被重置了一样,不知道为啥回这样;

源码,与图文描述:
using System.Windows;
using System.Windows.Input;
using DragerTestingProject.BaseControl;

namespace MyWpfTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.l1.PreviewMouseDown += new MouseButtonEventHandler(l1_PreviewMouseDown);
            this.l2.PreviewMouseDown += new MouseButtonEventHandler(l1_PreviewMouseDown);
            this.l3.PreviewMouseDown += new MouseButtonEventHandler(l1_PreviewMouseDown);
            l1.LayerName = "this is first layer,这是第一个图层";
            l2.LayerName = "this is second layer,这是第二个图层";
            l3.LayerName = "this is third layer,这是第三个图层";
        }

        void l1_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            var l = sender as DesignerLayer;
            
            // chinese:
            // 为啥这里对从Remove之后,
            // 再Add或是Insert回去,之后:l(DesignerLayer)的.Template的内容会重置,
            // 而且,多点几次,这个Template甚至会==null
            // 这是什么原因呢?
            // 我的这个项目内容有点多,我只是把其中的一个关键问题,抽到了这个测试项目里做为测试。

            // enlgish:
            // the l(DesignerLayer) obj Template will reset,
            // when i remove it from parent(Canvas), 
            // and then re-add or re-insert to the parent(Canvas);
            // Event Template will be null, where run this code(Remove and re-add or re-insert) few times.

            // i don't know why.

            c1.Children.Remove(l); 
            //c1.Children.Insert(0, l);
            c1.Children.Add(l);
        }
    }
}


--------------------编程问答-------------------- 看来,弄两个版是正确选择。
CSDN都没人的;
要去stackoverflow问下 --------------------编程问答-------------------- 在Stackoverflow 终于解决了。。。
想要结果的,自己去搜索。。。

CSDN太冷清了。。。 --------------------编程问答-------------------- Mark一下,希望楼主解决以后,可以给个原因和答案,我暂时还没有研究出来什么问题
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,