【问题标题】:WPF Copied Button Click not firingWPF复制的按钮单击未触发
【发布时间】:2016-08-05 12:06:15
【问题描述】:

我对 c# wpf 还很陌生,遇到了一个问题。

我使用this post 的答案复制了一个网格控件。网格控件包含一个按钮。看起来它被正确复制了。

当原始控件的按钮被按下时,点击事件被处理,该事件调用窗口代码中的一个方法。

当按下控件按钮的副本时,不会触发 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>

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

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");
    }

【问题讨论】:

  • 我在该链接中看不到任何与网格控件或按钮相关的内容。我什至跟着它到了 CodeProject 源代码。您能否提供更多帮助 - 特别是您希望在单击时触发什么,即它是代码中的事件处理程序,还是您绑定到 ICommand 实例?
  • 谢谢!!我不知道如何在 wpf 中使用模板。正是我需要的!

标签: c# wpf xaml


【解决方案1】:

绑定没有设置,你需要设置它们(在原帖中评论):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多