それが選択されたときにツリービューアイテムのテンプレートを変更します
-
21-08-2019 - |
質問
私は、それを選択したときにツリービューアイテムのために使用されているのDataTemplateを変更するいくつかの問題を抱えています。理想的には、私はTextBlock
を含むように、各項目を希望し、選択されたとき、それは代わりにTextBox
が含まれている必要があります。
ここで私はこれまでのところ(私はこの質問を使用しているものです>として出発点)
<Window>
<Window.Resources>
<HierarchicalDataTemplate x:Key="normal"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="selected"
ItemsSource="{Binding Path=Children}">
<TextBox Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle">
<Setter Property="ItemTemplate" Value="{StaticResource normal}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource selected}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resource>
<Grid>
<TreeView ItemSource="{Binding Body}" ItemContainerStyle="{StaticResource ContainerStyle}" />
</Grid>
</Window>
何が起こるかというとそこツリー内の唯一のノードであり、ノードのテキストは、オブジェクトの型の名前であるということです。ノードにバインドされたタイプは、テンプレートが期待されるものではないので、それは私が指定されている代わりにToString()
プロパティの結合デフォルトText
を使っているように思えます。
私は、分離コードファイル内のウィンドウのDataContextのを設定しています。私は、TreeViewコントロールのために1 HierarchicalDataTemplate
を設定した場合、データが正しく表示されているため、データのための私のバインディングは、正しいことを知っています。
私は私の問題は、私はItemTemplate
スタイルでTreeViewItem
以外のプロパティを設定する必要があることだと思い - ?私は右のプロパティを使用しています、または私は何か他のものを設定する必要があります。
解決
これは実際にあなたが必要とするHeaderTemplateだ - それは、ノード自体のスタイルを支配するものです。完全なサンプルがあるだけので、これは私のために働いていたものです。
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<HierarchicalDataTemplate x:Key="normal"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="selected"
ItemsSource="{Binding Path=Children}">
<TextBox Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<Style TargetType="{x:Type TreeViewItem}"
x:Key="ContainerStyle">
<Setter Property="HeaderTemplate"
Value="{StaticResource normal}" />
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="HeaderTemplate"
Value="{StaticResource selected}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TreeView x:Name="_Tree" ItemContainerStyle="{StaticResource ContainerStyle}"/>
</Grid>
</Window>
..このような背後にあるいくつかのテストコード付きます:
Imports System.Collections.ObjectModel
Class Window1
Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Dim Root As New Node
Root.Text = "Root"
Dim Child As New Node
Child.Text = "Child"
Root.Children.Add(Child)
Dim Nodes As New Collection(Of Node)
Nodes.Add(Root)
_tree.itemssource = Nodes
End Sub
End Class
Public Class Node
Private _Text As String
Public Property Text() As String
Get
Return _Text
End Get
Set(ByVal Value As String)
_Text = Value
End Set
End Property
Private _Children As New Collection(Of Node)
Public Property Children() As Collection(of node)
Get
Return _Children
End Get
Set(ByVal Value As Collection(of node))
_Children = Value
End Set
End Property
End Class
所属していません StackOverflow