【发布时间】:2016-10-21 21:23:50
【问题描述】:
我正在创建一个用于读取日志的 WPF 应用程序。目前,我在扩展器内部有扩展器。当我单击扩展器时,我希望范围是该扩展器的内容。所有其他对等扩展器都消失了 (Visibility.Collapsed)。
这适用于扩展器的第一行。一旦我展开子扩展器,这将再次起作用,但父扩展器仍列在其上方。
我想折叠对等节点(与之前相同)以及父节点,但保持父节点展开,以便仅显示展开的子节点。
几句话就“展开”了很多!但无论如何...
以下是预期输出的示例:
最初:
扩展器 1
扩展器 2
扩展器 3
扩展器 4
假设我点击 Expander 2:
-
扩展器 2
子扩展器 1
子扩展器 2
子扩展器 3
子扩展器 4
所有其他都已折叠,但仍处于展开状态。显示儿童。
假设我点击了 Child Expander 3
- 子扩展器 3
所有其他人都已折叠,包括父项!
有没有办法做到这一点?
这是我当前的代码(一开始切换有点令人困惑):
private Boolean toggleLogs = false;
private Boolean subToggleLogs = false;
public LogsControl()
{
InitializeComponent();
}
private void expanderPanel_Click(object sender, RoutedEventArgs e)
{
toggleLogs = !toggleLogs;
if (toggleLogs == true)
{
setLogVisibility(expanderPanel);
} else
{
toggleLogVisibility(expanderPanel);
}
}
private void windowsServicePanel_Click(object sender, RoutedEventArgs e)
{
toggleLogs = false;
subToggleLogs = !subToggleLogs;
if (subToggleLogs == true)
{
setLogVisibility(windowsServicePanel);
}
else
{
toggleLogVisibility(windowsServicePanel);
}
}
private void javaPanel_Click(object sender, RoutedEventArgs e)
{
toggleLogs = false;
subToggleLogs = !subToggleLogs;
if (subToggleLogs == true)
{
setLogVisibility(javaPanel);
}
else
{
toggleLogVisibility(javaPanel);
}
}
public void toggleLogVisibility(StackPanel panel)
{
var childNumber = VisualTreeHelper.GetChildrenCount(panel);
for (var i = 0; i <= childNumber - 1; i++)
{
var uiElement = VisualTreeHelper.GetChild(panel, i) as Expander;
uiElement.Foreground = new SolidColorBrush(Colors.White);
if (uiElement.IsExpanded == false)
{
uiElement.Visibility = Visibility.Visible;
}
}
}
public void setLogVisibility(StackPanel panel)
{
var childNumber = VisualTreeHelper.GetChildrenCount(panel);
for (var i = 0; i <= childNumber - 1; i++)
{
var uiElement = VisualTreeHelper.GetChild(panel, i) as Expander;
if (uiElement.IsExpanded == true)
{
uiElement.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FF3399FF"));
uiElement.Visibility = Visibility.Visible;
}
else
{
uiElement.Visibility = Visibility.Collapsed;
}
}
}
【问题讨论】: