我遇到按鈕的單擊事件時遇到問題,並且正在使用Silverlight 3.0 w /匹配Silverlight Toolkit。Silverlight:定義分層數據模板中的事件處理程序
問題
我有這樣的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我可以很好地改變字體大小,但是沒有找到任何方法來訪問文本框或按鈕。
有沒有什麼辦法可以捕捉按鈕的點擊事件?或者有什麼替代方法可以讓「添加下面」功能變得更好?
預先感謝您。
更多數據
樹形視圖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的appraoch):
<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; }
(Plus作爲INotifyPropertyChanged的代碼即可獲得一個雙向綁定到文本框)。
太棒了。感謝您的幫助! 我知道微軟會徹底,有辦法做我想做的事情。 ;) – Cornelius 2009-09-02 08:23:02
Node類在哪裏?我需要WPF UserControl中的確切行爲,但由於沒有對Node類的名稱空間的引用,所以無法將其編譯,因此我沒有提供幫助。謝謝。 – Shawn 2010-11-29 22:05:52
'Node'類是你自己的類。它是樹視圖中每個節點使用數據綁定綁定到的對象的類。 – 2010-11-30 00:27:48