WinFormsアプリケーションでは、a のレベルはWPFで
対応するコマンドは何ですか?treeview
によって与えられます。node.level
2 に答える
質問を考えると:-
ノードをクリックしたときに、それがどのレベルかをどのように知ることができますか? 回避策はありますか?
考えられる回避策は次のとおりです。
おそらくイベントからVisual TreeにControl への参照がある場合、Click
そのコントロールを使用して、私が過去に使用したこのような関数を呼び出すことで、ツリー ビューのどのレベルにあるかを調べることができます。
private int FindTreeLevel(DependencyObject control)
{
var level = -1;
if (control != null)
{
var parent = VisualTreeHelper.GetParent(control);
while (!(parent is TreeView) && (parent != null))
{
if (parent is TreeViewItem)
level++;
parent = VisualTreeHelper.GetParent(parent);
}
}
return level;
}
このメソッドは、VisualTree をたどり、見つかったコントロールの数をカウントしてから、コントロールTreeViewItem
を見つけたときに停止しTreeView
ます。
これを XAML で使用できるようにする必要がある場合 (たとえば、 aDataTrigger
の aなど)、これをクラスHierarchicalDataTemplate
にパッケージ化できます。IValueConverter
<Window.Resources>
<local:TreeLevelConverter x:Key="treeLevelConverter"/>
<HierarchicalDataTemplate DataType="{x:Type local:MyType}" >
...
<Grid ... >
<TextBlock x:Name="MyControl" ... />
...
</Grid>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource treeLevelConverter}}" Value="0" >
<Setter TargetName="MyControl" Property="Background" Value="Red"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
</Window.Resources>
次に、次のコンバーターを使用します
public class TreeLevelConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var level = -1;
if (value is DependencyObject )
{
var parent = VisualTreeHelper.GetParent(value as DependencyObject );
while (!(parent is TreeView) && (parent != null))
{
if (parent is TreeViewItem)
level++;
parent = VisualTreeHelper.GetParent(parent);
}
}
return level;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
}
あなたの質問に対する直接的な答えは、WPF には level プロパティがないということです。
winforms コントロールと wpf コントロールの間には 1 対 1 の関係はありません。基盤となるアーキテクチャと使用法が両者でまったく異なるためです。WPF では、階層型データ (データ構造の LinkedList の種類) を TreeView にバインドし、HeirarchicalDataTemplate を Treeview.ItemTemplate プロパティに定義します。