C# 将值附加到Silverlight中的treeviewitem项
我正在尝试为silverlight应用程序创建控件,但遇到了一些问题。控件是一个树状视图。当我选择一个项目时,它应该传递宽度和高度值来更新画布的大小。它们基本上是模板。假设我希望我的模板是“大正方形”,宽度和高度值分别为600和600,“小正方形”为400*400,矩形为600表示宽度,400表示高度。等等这将绑定到我的画布宽度和高度属性。正方形将位于一个称为“正方形”的父项下,矩形将位于“矩形”下,等等 我可以用XAML编写树视图,但不能将高度和宽度值附加到树视图,因此无法将画布高度和宽度绑定到任何内容。我想在一个.cs文件中定义我的项目(包括父项、模板名、高度和宽度),并用它填充树视图。然后,当选择某个项目时,与该项目关联的值将作为“我的宽度”和“高度”传递给my MainPage.xaml中的控件,这些控件已绑定到我的画布宽度和高度 没有太多现有的代码需要添加,但即使我可以让这个例子工作,这将是一个很大的帮助C# 将值附加到Silverlight中的treeviewitem项,c#,wpf,silverlight,treeview,C#,Wpf,Silverlight,Treeview,我正在尝试为silverlight应用程序创建控件,但遇到了一些问题。控件是一个树状视图。当我选择一个项目时,它应该传递宽度和高度值来更新画布的大小。它们基本上是模板。假设我希望我的模板是“大正方形”,宽度和高度值分别为600和600,“小正方形”为400*400,矩形为600表示宽度,400表示高度。等等这将绑定到我的画布宽度和高度属性。正方形将位于一个称为“正方形”的父项下,矩形将位于“矩形”下,等等 我可以用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+"";
}