我有一个问题,想要获取按钮的点击事件,使用的是Silverlight 3.0和匹配的Silverlight Toolkit。
问题
我有这个TreeView:
TreeView sample http://a.imagehost.org/0939/TreeView.png。
某个节点的值是其子节点值的总和。目前只能在叶子节点添加数据。 我想实现的是用户可以添加(并最终删除)树中的条目,以创建自定义图表。 为此,我希望“加号”可以插入一个新行/节点作为用户单击的节点的子节点。(例如,如果我在“Display”处单击加号,则会在下面得到一行,以指定CRT或TFT或其他内容。)
问题是,尽管我想了很久,但我不知道如何接收任何有用的事件。 TextBlock、TextBox和Button在分层模板中定义,我无法在该模板中定义Click处理程序。
另一方面,我还没有找到一种方法可以从(C#)代码中获取某个TreeViewItem的模板项。 我很清楚地知道可以通过trv.ItemContainerGenerator.GetContainerFromItem(item)来实现,而且正如Justin Angel展示的那样,我也可以很好地更改字体大小,但是没有找到任何访问文本框或按钮的方法。
有没有办法捕获按钮的单击事件? 或者获取提供“添加下面”功能的其他替代方法?
提前致谢。
更多数据
树形视图 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 的代码以实现文本框的双向绑定。)