코드를 읽는 것이 매우 어려울 것이라고 생각하지만 최선을 다하겠습니다.TreeView의 부모 노드에 대한 액세스?
이<TreeView x:Name="stateMachinesView"
DockPanel.Dock="Top"
SelectedItemChanged="item_Selected"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
BorderThickness="0">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Value}">
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<DockPanel>
<DockPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Create Thumbnail"
Click="MenuItemCreate_Click"/>
</ContextMenu>
</DockPanel.ContextMenu>
<Image>
<Image.Style>
<Style TargetType="Image">
<Style.Setters>
<Setter Property="Source"
Value="Resources\state.png"/>
</Style.Setters>
<Style.Triggers>
<DataTrigger Binding="{Binding Item2}"
Value="true">
<Setter Property="Source"
Value="Resources\state_init.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock>
<TextBlock.Text>
<Binding Path="Item1"/>
</TextBlock.Text>
</TextBlock>
</DockPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<DockPanel>
<Image DockPanel.Dock="Left"
Source="Resources\state_machine.png"/>
<TextBlock Text="{Binding Key}"/>
</DockPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
이의 항목 소스가 내가 이런 걸 가지고하는 Dictionary<string, ObservableCollection<Tuple<string, bool>>>
시각입니다 : 여기
내 XAML 코드입니다, 지금을 때 클릭하여 내 MenuItem
이 코드를 가지고 :
private void MenuItemCreate_Click(object sender, RoutedEventArgs e)
{
string stateName =
((sender as FrameworkElement).DataContext as Tuple<string, bool>).Item1;
}
나는 위의 코드와 State1_1에 액세스 할 수 있지만 지금은 SM1 부모 노드에 접근하고 싶습니다!
DependencyObject parent = VisualTreeHelper.GetParent(sender as DependencyObject);
while (!(parent is TreeViewItem))
parent = VisualTreeHelper.GetParent(parent);
그러나 나는, 너무, 템플릿에 대해 생각하고
... 작동하지 않습니다 : 나는 많은 것들을 시도
(솔루션에) 가장 가까운이 있었다 XAML에서는 코드 숨김으로 쉽게 처리 할 수 있습니다.
당신은 Treeview를 통해 반복하는 간단한 방법을 찾고 있습니까? 그렇다면 코드 뒤에 선집으로 사용할 수있는 아주 간단한 예제를 붙여 넣을 수 있습니다. – MethodMan