gpt4 book ai didi

winrt-xaml - x :Name doesn't work in XAML Flyout control

转载 作者:行者123 更新时间:2023-12-02 01:59:27 25 4
gpt4 key购买 nike

我在 Windows 8.1 C# 应用程序中尝试了以下操作:

<!-- XAML file -->
<Page.BottomAppBar>
<CommandBar>
<AppBarButton Label="Add News Feed" Icon="Add">
<AppBarButton.Flyout>
<Flyout>
<StackPanel Width="400">
<TextBlock TextWrapping="Wrap" Text="Enter Text:" Margin="0,0,0,10"/>
<TextBox x:Name="inputTextBox"/>
<Button Content="Add" HorizontalAlignment="Right" VerticalAlignment="Stretch" Click="AddButton_Click"/>
</StackPanel>
</Flyout>
</AppBarButton.Flyout>
</AppBarButton>
</CommandBar>
</Page.BottomAppBar>
// C# file
private void AddButon_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
var text = inputTextBox.Text;
// Do something with the text
}

但是,当我运行我的应用程序并单击“添加”按钮时,我得到一个 System.NullReferenceException,因为成员 inputTextBox 为 null。我检查了一下,生成的 InitializeComponent 方法包含以下行:

inputTextBox = (global::Windows.UI.Xaml.Controls.TextBox)this.FindName("inputTextBox");

我什至尝试更改我的事件处理程序以调用 FindName 以防在显示 Flyout 时创建控件并且它仍然返回 null。为什么 FindName 找不到我的文本框?

更新:解决方法

我能够使用 VisualTreeHelper 访问 TextBox,如下所示:

TextBox textBox = null;
var parent = VisualTreeHelper.GetParent(sender as Button);
var numChildren = VisualTreeHelper.GetChildrenCount(parent);
for (var i = 0; i < numChildren; ++i)
{
var child = VisualTreeHelper.GetChild(parent, i) as FrameworkElement;
if (child != null && child.Name == "inputTextBox")
{
// Found the text box!
textBox = child as TextBox;
break;
}
}

if (textBox != null)
{
var text = textBox.Text;
// Do something with the text
}

如果这确实被确认为 Windows 8.1 预览版中的错误,我将继续并关闭此问题。

最佳答案

这是 8.1 预览版的问题,我们希望在 8.1 的最终版本中解决这个问题

关于winrt-xaml - x :Name doesn't work in XAML Flyout control,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17963013/

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