【发布时间】:2009-09-01 10:38:26
【问题描述】:
我在获取按钮的单击事件时遇到问题,我正在使用 Silverlight 3.0 与 Silverlight Toolkit 匹配。
问题
我有这个 TreeView:
TreeView sample http://a.imagehost.org/0939/TreeView.png.
某个节点的值是其子节点值的总和。只有在叶子中才能添加数据(暂时)。 我想要实现的是用户可以在树中添加(并最终删除)条目以最终创建自定义图表。 为此,我希望“加号”插入一个新行/节点作为用户单击的节点的子节点。 (即,如果我单击“显示”处的加号,我会在下面看到一行来指定 CRT 或 TFT 或其他任何内容。)
问题是,尽管我的大脑很有价值,但我不知道如何接收任何有用的事件。 TextBlock、TextBox 和 Button 是在分层模板中定义的,我无法在该模板中定义 Click-handler。
OTOH,我还没有找到从 (c#) 代码中获取某个 TreeViewItem 的模板项的方法。很好,我能够做到 trv.ItemContainerGenerator.GetContainerFromItem(item),并且作为Justin Angel showed,我可以很好地更改字体大小,但没有找到任何访问文本框或按钮的方法。
有什么方法可以捕捉到按钮的点击事件?或者任何其他获得“添加下方”功能的方法?
提前谢谢你。
更多数据
treeview xaml 是这样的:
<controls:TreeView x:Name="SankeyDataTree"
ItemTemplate="{StaticResource SankeyTreeTemplate}" BorderThickness="0"
Background="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Top">
<controls:TreeViewItem IsExpanded="True">
<controls:TreeViewItem.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Loading..."/>
</DataTemplate>
</controls:TreeViewItem.HeaderTemplate>
</controls:TreeViewItem>
</controls:TreeView>
我使用这个 HierarchicalDataTemplate(并从Timmy Kokke 偷了方法):
<Data:HierarchicalDataTemplate x:Key="SankeyTreeTemplate" ItemsSource="{Binding Children}">
<Grid Height="24">
<Grid.ColumnDefinitions>
<!-- ... -->
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=Value.name, Mode=TwoWay}" VerticalAlignment="Center"/>
<TextBox Text="{Binding Path=Value.flow, Mode=TwoWay}" Margin="4,0" VerticalAlignment="Center" d:LayoutOverrides="Width" Grid.Column="1" TextAlignment="Right" Visibility="{Binding Children, Converter={StaticResource BoxConverter}, ConverterParameter=\{box\}}"/>
<TextBlock Text="{Binding Path=Value.throughput, Mode=TwoWay}" Margin="4,0" VerticalAlignment="Center" d:LayoutOverrides="Width" Grid.Column="1" TextAlignment="Right" Visibility="{Binding Children, Converter={StaticResource BoxConverter}, ConverterParameter=\{block\}}"/>
<Button Margin="0" Grid.Column="2" Style="{StaticResource TreeViewItemButtonStyle}">
<Image Source="../Assets/add.png" Margin="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Button>
</Grid>
</Data:HierarchicalDataTemplate>
到这个 TreeView 绑定了一个“SimpleTree”,它的值基本上只包含一个字符串(名称)和两个双精度数(流量和吞吐量)。
public String name { get; set; }
public Double flow { get; set; }
public Double throughput { get; set; }
(加上 INotifyPropertyChanged 的代码以双向绑定到文本框。)
【问题讨论】:
标签: silverlight treeview events