0

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

我可以在 XAML 中编写树视图,但不能将高度和宽度值附加到它,因此不能将我的画布高度和宽度绑定到任何东西。我正在考虑在 .cs 文件中定义我的项目(带有父项、模板名称、高度和宽度)并使用它来填充树视图。Then when an item is selected the values associated with that item are passed as my width and height to controls in my MainPage.xaml which are already bound to my canvas width and height.

不需要添加太多现有代码,但即使我可以让这个示例正常工作,它也会有很大帮助。

<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; }


}           
4

1 回答 1

1

这是你的 xml

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

        }
于 2012-08-21T13:44:03.423 回答