C# 将值附加到Silverlight中的treeviewitem项

C# 将值附加到Silverlight中的treeviewitem项,c#,wpf,silverlight,treeview,C#,Wpf,Silverlight,Treeview,我正在尝试为silverlight应用程序创建控件,但遇到了一些问题。控件是一个树状视图。当我选择一个项目时,它应该传递宽度和高度值来更新画布的大小。它们基本上是模板。假设我希望我的模板是“大正方形”,宽度和高度值分别为600和600,“小正方形”为400*400,矩形为600表示宽度,400表示高度。等等这将绑定到我的画布宽度和高度属性。正方形将位于一个称为“正方形”的父项下,矩形将位于“矩形”下,等等 我可以用XAML编写树视图,但不能将高度和宽度值附加到树视图,因此无法将画布高度和宽度绑定

我正在尝试为silverlight应用程序创建控件,但遇到了一些问题。控件是一个树状视图。当我选择一个项目时,它应该传递宽度和高度值来更新画布的大小。它们基本上是模板。假设我希望我的模板是“大正方形”,宽度和高度值分别为600和600,“小正方形”为400*400,矩形为600表示宽度,400表示高度。等等这将绑定到我的画布宽度和高度属性。正方形将位于一个称为“正方形”的父项下,矩形将位于“矩形”下,等等

我可以用XAML编写树视图,但不能将高度和宽度值附加到树视图,因此无法将画布高度和宽度绑定到任何内容。我想在一个.cs文件中定义我的项目(包括父项、模板名、高度和宽度),并用它填充树视图。然后,当选择某个项目时,与该项目关联的值将作为“我的宽度”和“高度”传递给my MainPage.xaml中的控件,这些控件已绑定到我的画布宽度和高度

没有太多现有的代码需要添加,但即使我可以让这个例子工作,这将是一个很大的帮助

<sdk:TreeView x:Name="trvTemplate">
        <sdk:TreeViewItem Header="Squares">
              <sdk:TreeViewItem Header="Big Square"/>
              <sdk:TreeViewItem Header="Smaller Square"/>
        </sdk:TreeViewItem>
        <sdk:TreeViewItem Header="Rectangles">
              <sdk:TreeViewItem Header="Big Rectangle"/>
              <sdk:TreeViewItem Header="Small Rectangle"/>
        </sdk:TreeViewItem>
<\sdk:TreeView>

这在树视图中是可能的吗?如果可能的话,我会怎么做?谢谢你的帮助

编辑:现在考虑一下,我可以很容易地在每个模板上使用EventHandler,但我不希望这样做,而是采用mvvm方法

也许是这样的

public class CanvasTemplate
{
    private static List<CanvasTemplate> listTemplates = null;

    public CanvasTemplate(string name, double width, double height)
    {


        new CanvasTemplate("Template 1", 800, 400);
        new CanvasTemplate("Template 2", 600, 600);

        Name = name;
        Width = width;
        Height = height;

    }


    public string Name { get; set; }
    public double Width { get; set; }
    public double Height { get; set; }


}           
public类CanvasTemplate
{
私有静态列表listTemplates=null;
公共CanvasTemplate(字符串名称、双宽、双高)
{
新的CanvaTemplate(“模板1”,800400);
新的CanvaTemplate(“模板2”,600600);
名称=名称;
宽度=宽度;
高度=高度;
}
公共字符串名称{get;set;}
公共双宽度{get;set;}
公共双倍高度{get;set;}
}           
这是您的xaml

            <sdk:TreeView.ItemTemplate>
            <DataTemplate>
                <sdk:TreeViewItem Header="{Binding HeaderName}" ItemsSource="{Binding ListTemplates}">
                    <sdk:TreeViewItem.ItemTemplate>
                        <DataTemplate>
                            <sdk:TreeViewItem Header="{Binding Name}"  GotFocus="TreeViewItem_GotFocus"/>
                        </DataTemplate>
                    </sdk:TreeViewItem.ItemTemplate>


                </sdk:TreeViewItem>
            </DataTemplate>
        </sdk:TreeView.ItemTemplate>
        </sdk:TreeView>


您可以将树视图绑定到一个类对象,并在选择时检索datacontext使用该类对象,该类对象也具有画布的高度和宽度…是的,并在选择时检索datacontext使用该类对象,该类对象也具有高度和宽度这是我以前尝试使用的类,但我没有从中获得任何信息。你能给我一个我需要的XAML的例子吗?或者我的课写错了?
public class ParentCanvasTemplate
    {
        public ParentCanvasTemplate(string headername)
        {
            if (headername == "Squares")
            {
                HeaderName = headername;
                ListTemplates = new List<CanvasTemplate>();
                CanvasTemplate ct = new CanvasTemplate("Smaller Square", 400, 400);
                ListTemplates.Add(ct);
                ct = new CanvasTemplate("Bigger Square", 800, 800);
                ListTemplates.Add(ct);
            }
            else if (headername == "Rectangles")
            {
                HeaderName = headername;
                ListTemplates = new List<CanvasTemplate>();
                CanvasTemplate ct = new CanvasTemplate("Smaller Rectangle", 600, 400);
                ListTemplates.Add(ct);
                ct = new CanvasTemplate("Bigger Rectangle", 800, 600);
                ListTemplates.Add(ct);
            }
        }
        public string HeaderName { get; set; }
        public List<CanvasTemplate> ListTemplates { get; set; }
    }

    public class CanvasTemplate
    {


        public CanvasTemplate(string name, double width, double height)
        {       

            Name = name;
            Width = width;
            Height = height;

        }


        public string Name { get; set; }
        public double Width { get; set; }
        public double Height { get; set; }


    }  
List<ParentCanvasTemplate> lst = new List<ParentCanvasTemplate>();
            ParentCanvasTemplate pct = new ParentCanvasTemplate("Squares");
            lst.Add(pct);
            pct = new ParentCanvasTemplate("Rectangles");
            lst.Add(pct);
            trvTemplate.ItemsSource = lst;
 private void TreeViewItem_GotFocus(object sender, RoutedEventArgs e)
        {
            string test = ((sender as TreeViewItem).DataContext as CanvasTemplate).Name;
            string Width = ((sender as TreeViewItem).DataContext as CanvasTemplate).Width+"";

        }