当不存在时,元素已经是另一个元素的子元素?

时间:2015-10-05 14:57:52

标签: c# windows win-universal-app

我试图以编程方式创建一个按钮弹出按钮,在我的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);然后我收到此错误元素已经是另一个元素的子元素。

有谁理解为什么?我已经看过,但他们还没有存在,所以我不明白为什么它会给我这个错误。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不确定你在做什么情况/用例,但是对于我来说,实际控制为Resource(而不是DataTemplate,{{1}感到奇怪。等等)。

如果您只想拥有2个不同模板中的1个按钮,为什么不在2上切换Style而不是从代码中加载控件?

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

框架内有一个BooleanToVisibilityConverter可以帮助您解决此问题。