【发布时间】: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 中使用模板。正是我需要的!