元素已经是另一个不存在的元素的子元素

本文关键字:元素 不存在 另一个 | 更新日期: 2023-09-27 18:16:00

我试图以编程方式创建一个按钮弹出,在我的XAML我有:

 <Page.Resources>
    <Button x:Key="LaunchFlyout" Content="LAUNCH">
        <Button.Flyout>
            <Flyout Placement="Top">
                <Grid Width="200" Height="200">
                    <StackPanel>
                        <Rectangle Fill="Red" Width="100" Height="100" />
                        <Rectangle Fill="Green" Width="100" Height="100" />
                    </StackPanel>
                </Grid>
            </Flyout>
        </Button.Flyout>
    </Button>
</Page.Resources>

嵌套在grids我有:

<Grid x:Name="launchBtn_grid" Grid.Column="1">
</Grid>

然后在Page_Loaded方法的代码中,我有:

bool hasContainer = localSettings.Containers.ContainsKey("appStatus");
if (!hasContainer) {
    Button button = (Button)this.Resources["LaunchFlyout"];
    launchBtn_grid.Children.Add(button);
}
else {
    Button button = new Button();
    button.Content = "LAUNCH";
    button.Click += launch_btn_Click;
    launchBtn_grid.Children.Add(button);
}

当我调试它时,它到达IF语句并到达launchBtn_grid.Children.Add(button);行,然后我得到这个错误元素已经是另一个元素的子元素。

有人知道为什么吗?我已经看过了,他们不存在,所以我不明白为什么它给我这个错误。有人知道我做错了什么吗?

元素已经是另一个不存在的元素的子元素

我不确定你在什么上下文/用例中这样做,但对我来说,有一个实际的控制作为Resource(不是DataTemplate, Style等)感觉很奇怪。

如果你只想有2个不同模板的1个按钮,为什么不切换Visibility上的2,而不是从你的代码后面加载控件?

继续使用这个想法,只需在XAML中添加Grid中的两个按钮,并根据您阅读的设置切换它们的Visibility

在框架中有一个BooleanToVisibilityConverter来帮助你做到这一点