c# - 无法在后面的代码中访问列表框中的按钮
问题描述
我在 WPF 应用程序的列表框中有一个文本框和按钮。现在,我有一个场景,当我单击按钮时,文本块需要处于编辑模式,并且按钮需要处于隐藏状态。一旦用户完成编辑(在文本框上调用 keyup 事件),按钮需要处于可见模式。我在按钮上调用点击事件并将其隐藏,现在我必须访问点击事件函数内的文本框以使其处于可编辑模式(只读错误)。同样,当我完成编辑后,我需要在文本框的 Keyup 事件处理程序中调用按钮以使按钮可见。但我没有得到后面代码中的控件。我知道导致此问题的列表视图的 DataTemplate 绑定。因此,为了使按钮可见,我执行了以下代码并且它正在工作。
private void controlEdit_Click_1(object sender, RoutedEventArgs e)
{
var edtBtn = sender as Button;
if (edtBtn != null)
{
edtBtn.Visibility = Visibility.Hidden;
}
}
但我不知道如何在我的文本框 Keyup 事件处理程序中调用此按钮,与此按钮单击事件处理程序中的文本框相同。我的列表框 XAML 和 KeyUp 事件处理程序正在添加。
XAML
<ListBox x:Name="ElList" Height="auto" Width="300" Background="Transparent" DataContext="{Binding collec}" ItemsSource="{Binding collec}" Grid.Row="0" Margin="31 3" HorizontalAlignment="Left">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox x:Name="controltext" Width="153.7" Height="24.4" BorderBrush="#ffffff" FontFamily= "{StaticResource MontserratMedium}" Padding="2 0 0 0 " Text="{Binding ElName, Mode=TwoWay}" VerticalAlignment="Center" IsReadOnly="False" KeyDown="controltext_KeyDown" KeyUp="controltext_KeyUp" LostKeyboardFocus="controltext_LostKeyboardFocus"/>
<Button x:Name="controlEdit" Style="{StaticResource ImageButtonStyle}" Margin="3 0 0 0 " Click="controlEdit_Click_1">
<Image x:Name="featherImg" Source="Resources\feather_edit-3.png" Height="11" Width="11"/>
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
文本框 KeyUp 事件处理程序
private void controltext_KeyUp(object sender, KeyEventArgs e)
{
string NewName = ((System.Windows.Controls.TextBox)sender).Text;
//Make the button visble.
}
所以建议我一种方法如何访问按钮单击事件处理程序中的文本框,以及如何访问文本框 KeyUp 中的按钮。
解决方案
如果您知道可视树的结构,则可以使用 Parent 和 Children 属性对其进行导航:
private void controltext_KeyUp(object sender, KeyEventArgs e)
{
var textbox = (TextBox)sender;
var panel = (StackPanel)textbox.Parent;
var button = panel.Children.OfType<Button>().FirstOrDefault(b => b.Name == "controlEdit");
}
子属性对面板有意义,控件有内容,装饰器(如边框)有子属性
推荐阅读
- python - 仅为少数字段添加 help_text。姜戈
- c++ - 人脸跟踪arduino代码优化
- android - 如何在 Dart\Flutter 中使用我的 JSON 响应
- css - 图像作为在 flexbox 中布局的链接
- android - 无法使用分页刷新 recyclerView
- elasticsearch - 更改任何 NON-INDEXED 字段的映射时,是否需要强制重新索引所有旧文档?
- java - 为什么要覆盖父接口中的现有方法?
- linux - 如何指定“无端口”
- python-3.x - 如何在 dict 中传递 ForeignKey 以创建 Model 对象。姜戈
- c++ - 为什么我必须在 C++ 中添加一个赋值符号来声明一个数组?