繁体   English   中英

WPF复制按钮单击不触发

[英]WPF Copied Button Click not firing

我对c#wpf很新,有问题。

我已经使用这篇文章中的答案来复制Grid控件。 网格控件包含一个按钮。 看起来它正在被正确复制。

按下原始控件的按钮时,将处理click事件,该事件调用窗口代码中的方法。

按下控件按钮的副本时,不会触发单击事件,也不会调用该方法。 这让我感到困惑,因为我希望它能够调用相同的方法。

也许事件处理数据没有被正确复制? 有没有解决的办法?

原始网格和复制网格(包含按钮)都是另一个网格的子节点。

编辑:

这是包含按钮的原始网格的xaml:

<Grid Name="TempTab" DockPanel.Dock="Left" HorizontalAlignment="Left" Margin="5,5,5,0">
            <Rectangle  Fill="Black" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stroke ="White" Margin="0,0,-2,0">
            </Rectangle>
            <Grid>
                <DockPanel LastChildFill="False">
                    <TextBlock Foreground="White" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="3,0,3,3">Some Text</TextBlock>
                    <Button Width="50" BorderBrush="{x:Null}" Foreground="{x:Null}" BorderThickness="0" Margin="3,0,0,0" Click="tabdowntest">
                        <Button.Background>
                            <ImageBrush ImageSource="TopMenuBar_Close.png" Stretch="Uniform"/>
                        </Button.Background>
                    </Button>
                </DockPanel>
            </Grid>
        </Grid>

此网格是DockPanel的子项,名称为“TabsDock”。 使用以下代码复制它:

string gridXaml = XamlWriter.Save(TempTab);
StringReader stringReader = new StringReader(gridXaml);
XmlReader xmlReader = XmlReader.Create(stringReader);
Grid newTab = (Grid)XamlReader.Load(xmlReader);
TabsDock.Children.Add(newTab);

这是“Click”事件处理程序的代码,当按下原始按钮或复制按钮时,应该调用该代码。 但它仅用于原始:

    private void tabdowntest(object sender, MouseButtonEventArgs e)
    {
        Console.WriteLine("Button Pressed");
    }

没有设置bindigs,你需要设置它们(在orig帖子中注释):

需要明确的是,这只是解决方案的一半(因为它在08年回顾)。 这将导致评估绑定并将结果序列化。 如果你想保留绑定(如问题所示)你必须在运行时将ExpressionConverter添加到Binding类型(请参阅我的问题的第二部分以获取相关链接)或者在下面看看我自己的答案,了解如何在4.0中执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM