【发布时间】:2013-05-18 11:35:27
【问题描述】:
我有一个UserControl 和多个StackPanel。我喜欢根据用户操作隐藏特定面板。启动时可见的StackPanel 为我提供了许多工作按钮。这些按钮在代码隐藏文件中具有单击事件。折叠面板然后使其再次可见后,按钮不再起作用。这是我UserControl的一部分:
<StackPanel x:Name="buttonPanel" Orientation="Horizontal">
<Button x:Name="ReMindNodeNotes" Content=""
FontFamily="Segoe UI Symbol" FontSize="14" Foreground="#FF292323"
HorizontalAlignment="Left" BorderThickness="1" Padding="0"
UseLayoutRounding="True" Click="NoteClicked" />
<Button x:Name="ReMindNodeRemove" Content=""
FontFamily="Segoe UI Symbol" FontSize="14" Foreground="#FF292323"
HorizontalAlignment="Left" BorderThickness="1" Padding="0"
UseLayoutRounding="True" Click="RemoveClicked" />
</StackPanel>
这里是代码(现在只是一些文本):
private void NoteClicked(object sender, RoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("NoteClicked...");
}
private void RemoveClicked(object sender, RoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("RemoveClicked...");
}
过去两天我一直在寻找解决方案。到目前为止没有运气。谁能帮忙...?
谢谢彼得
跟进 1...
下面是折叠面板的代码:
private void MoreClicked(object sender, RoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine(this.nodeName);
this.buttonPanel.Visibility =
this.buttonPanel.Visibility ==
Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
}
如果 buttonPanel 有焦点,它就可以工作。如果焦点在另一个面板上,则不会。此外,我可能应该提到...用户可以创建用户控件的多个实例。
谢谢
跟进 2...
我当然会继续研究解决方案... ;-) 我找到了解决方案,但这不是我想要的解决方案。让我解释一下。
用户可以交互地创建前面提到的用户控件的多个实例。创建新实例时,该实例将获得焦点。现在每个实例都有自己的一组按钮,这些按钮位于堆栈面板上。当焦点转到另一个实例时,我希望前一个实例的面板折叠。然后应将焦点设置到新的(或选定的现有)实例。
当我手动执行此操作时,它可以工作!但是,当我尝试通过 GotFocus 和 LostFocus 事件来实现这一点时,它没有。这是手动解决方案的代码(有效):
private void MoreClicked(object sender, RoutedEventArgs e)
{
this.buttonPanel.Visibility =
this.buttonPanel.Visibility ==
Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
}
以下是 LostFocus 和 GotFocus 事件:
private void NodeGotFocus(object sender, RoutedEventArgs e)
{
this.buttonPanel.Visibility = Visibility.Visible;
}
private void NodeLostFocus(object sender, RoutedEventArgs e)
{
this.buttonPanel.Visibility = Visibility.Collapsed;
}
非常感谢您的帮助!再次感谢...
【问题讨论】:
-
你所说的行为很奇怪。你能分享你折叠面板的代码吗?
-
我将代码添加到 Oleg 的原始帖子中。还不知道如何添加另一个帖子... ;-)
-
我已经使用您的代码创建了一个示例应用程序 - 它按预期工作 - 似乎问题在于您如何使用页面上的控件,而不是事件处理程序本身。顺便说一句,当您在 XAML 中定义名称时,VS 会在代码隐藏中创建相应的字段,因此您只需执行 this.buttonPanel.Visibility
-
感谢您的提示!我不知道访问面板和按钮可以直接在后面的代码中访问。你能把你的样品寄给我吗?这可能真的很有帮助!
-
当然。我在您的个人资料中没有找到任何电子邮件,请发送至dropbox.com/s/698t98lqybyciwi/Sample.zip
标签: wpf button visibility stackpanel