在WPF中,可以使用TreeView控件來顯示節點,并根據搜索條件來顯示相應的節點。
首先,你需要在WPF窗口中添加一個TreeView控件,并定義節點的數據模型。例如,假設你的數據模型是一個簡單的樹形結構:
public class Node
{
public string Name { get; set; }
public ObservableCollection<Node> Children { get; set; }
}
然后,在窗口的代碼文件中,你可以定義一個根節點的集合,并將其作為TreeView的數據源:
public partial class MainWindow : Window
{
public ObservableCollection<Node> Nodes { get; set; }
public MainWindow()
{
InitializeComponent();
Nodes = new ObservableCollection<Node>
{
new Node
{
Name = "Node 1",
Children = new ObservableCollection<Node>
{
new Node { Name = "Node 1.1" },
new Node { Name = "Node 1.2" }
}
},
new Node
{
Name = "Node 2",
Children = new ObservableCollection<Node>
{
new Node { Name = "Node 2.1" },
new Node { Name = "Node 2.2" }
}
}
};
treeView.ItemsSource = Nodes;
}
}
接下來,在搜索按鈕的點擊事件中,你可以根據搜索條件來過濾節點,并重新設置TreeView的數據源:
private void SearchButton_Click(object sender, RoutedEventArgs e)
{
string searchKeyword = searchTextBox.Text.Trim();
if (string.IsNullOrWhiteSpace(searchKeyword))
{
treeView.ItemsSource = Nodes;
}
else
{
var filteredNodes = new ObservableCollection<Node>();
FilterNodes(Nodes, filteredNodes, searchKeyword);
treeView.ItemsSource = filteredNodes;
}
}
private void FilterNodes(IEnumerable<Node> nodes, ObservableCollection<Node> filteredNodes, string searchKeyword)
{
foreach (var node in nodes)
{
if (node.Name.Contains(searchKeyword))
{
filteredNodes.Add(node);
}
if (node.Children != null)
{
FilterNodes(node.Children, filteredNodes, searchKeyword);
}
}
}
以上代碼中的FilterNodes方法使用遞歸遍歷所有節點,并將匹配搜索條件的節點添加到filteredNodes集合中。
最后,在XAML文件中,你需要為搜索按鈕的點擊事件添加事件處理程序:
<Button Content="搜索" Click="SearchButton_Click" />
這樣,當你輸入搜索條件并點擊搜索按鈕時,TreeView將顯示相應的節點。