我正在创建一个用于阅读日志的WPF应用程序。目前,我在扩展器内部有扩展器。当我点击Expander时,我希望范围是Expander的内容。所有其他同伴扩展器都会消失(Visibility.Collapsed
)。
这适用于扩展器的第一行。一旦我扩展了子扩展器,这又可以工作,但是父扩展器仍然在它上面列出。
我想折叠同行(与之前相同)以及父,但保持父展开,以便只展开展开的子展示。
在几句话中,这是很多“扩展”!但无论如何......
以下是预期输出的示例:
首先:
Expander 1
Expander 2
Expander 3
Expander 4
假设我点击Expander 2 :
Expander 2
儿童扩展器1
儿童扩展器2
儿童扩展器3
儿童扩展器4
所有其他人都已崩溃,但仍在扩展。显示儿童。
假设我点击Child Expander 3
所有其他人都已折叠,包括家长!
有没有办法实现这个目标?
这是我目前的代码(Toggling起初有点令人困惑):
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;
}
}
}
答案 0 :(得分:2)
如果将控件可见性设置为折叠或隐藏,则会折叠/隐藏所有子控件和内容。没办法解决这个问题。如果您想要做您想做的事情,您必须模拟层次结构。而不是实际嵌套扩展器,只是让它在屏幕上看起来像,但是你很难保持所有可见性状态同步。