我正在尝试对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; }
}
答案 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+"";
}