将值附加到Silverlight中的treeviewitem项

时间:2012-08-20 11:35:52

标签: c# wpf silverlight treeview

我正在尝试对Silverlight应用程序进行控制,但我遇到了一些麻烦。控件是树视图。当我选择一个项目时,它应该传递更新画布大小的宽度和高度值。它们基本上都是模板。假设我希望我的模板为“大方块”,它将传递600和600的宽度和高度值,“小方块”(400 * 400)和矩形宽度为600,高度为400。等等。这将绑定到我的画布宽度和高度属性。正方形将位于称为“正方形”的父级下,矩形位于“矩形”等下面。

我可以在XAML中编写树视图,但不能为其附加高度和宽度值,因此无法将画布的高度和宽度绑定到任何内容。我在考虑在.cs文件中定义我的项目(包括父项,模板名称,高度和宽度)并使用它来填充树视图。然后,当选择一个项目时,与该项目关联的值将作为我的宽度和高度传递给我的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>

这是否可以使用树视图,如果是这样,我将如何处理?谢谢你的帮助。

编辑:现在考虑一下我可以轻松地在每个模板上使用事件处理程序,但我宁愿不这样做,而是使用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; }


}           

1 个答案:

答案 0 :(得分:1)

这是你的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>

班级

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+"";

        }