gpt4 book ai didi

c# - 如何访问堆栈面板中网格中的文本框

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:44 24 4
gpt4 key购买 nike

我有以下代码:

<StackPanel x:Name="ContentStackPanel">
<Grid>
<TextBlock Text="Min Value" />
<TextBox Text="{Binding MinValue}" />
</Grid>
<Grid>
<TextBlock Text="Max Value" />
<TextBox Text="{Binding MinValue}" />
</Grid>
</StackPanel>

我想添加一个按钮,以便我可以清除两个文本框中的文本。此代码不起作用

        private void ClearAllClick(object sender, RoutedEventArgs e)
{
foreach (TextBox tb in ContentStack.Children)
{
tb.Text = String.Empty;
}
}

如何访问 ContentStackPanel 网格内的文本框?

最佳答案

Children 属性只给你直接的 child ,而不是所有的后代。您可以编写一个辅助方法来遍历树:

private void ClearAllClick(object sender, RoutedEventArgs e)
{
ClearTextChildren(ContentStackPanel);
}

private void ClearTextChildren((Panel container)
{
foreach (var element in container.Children)
{
if (element is TextBox)
((TextBox)element).Text = String.Empty;
else if (element is Panel)
ClearChildren((Panel)element);
}
}

另一种方法(可能更好,因为在代码中遍历 UI 树很脆弱)是在按钮上使用 Command 实现,而不是点击处理程序。这将允许您清除 View 模型属性而不是文本框本身。

<Button x:Name="ClearAll" Command="{Binding ClearAllCommand}" />

“ClearAllCommand”应该与“MinValue”和“MaxValue”在同一个地方:

public ICommand ClearAllCommand { get; private set; }

使用 standard DelegateCommand implementation :

ClearAllCommand = new DelegateCommand(arg => {
MinValue = null;
MaxValue = null;
});

关于c# - 如何访问堆栈面板中网格中的文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19522867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com