C# 如何得到一个孩子的“孩子”;“对象发送者”;用什么方法?
在我调用MouseUp方法的应用程序中,我有一个15边框,里面有一个图像。。所有图像都有不同的名称。。因此,我希望他们都称这为一种方法C# 如何得到一个孩子的“孩子”;“对象发送者”;用什么方法?,c#,wpf,C#,Wpf,在我调用MouseUp方法的应用程序中,我有一个15边框,里面有一个图像。。所有图像都有不同的名称。。因此,我希望他们都称这为一种方法 <GroupBox Width="75" Height="75"> <Border MouseLeftButtonUp="Image_MouseUp1" Background="Transparent"> <Image x:Name="RedPick5_Image" Height="Auto" Wi
<GroupBox Width="75" Height="75">
<Border MouseLeftButtonUp="Image_MouseUp1" Background="Transparent">
<Image x:Name="RedPick5_Image" Height="Auto" Width="Auto"/>
</Border>
</GroupBox>
如果图像是边框的唯一直接子级,则可以这样做:
Image image = (Image)((Border)sender).Child;
image.Source = // Set image source here.
您需要转换发件人并进行检查
private void Image_MouseUp1(object sender, MouseButtonEventArgs e)
{
var border = sender as Border; // Cast to Border
if (border != null) // Check if the cast was right
{
var img = border.Child as Image; // Cast to Image
if (img != null) // Check if the cast was right
{
// your code
}
// else your Child isn't an Image her you could hast it to an other type
}
// else your Sender isn't an Border
}
你也可以这样做
private void Image_MouseUp1(object sender, MouseButtonEventArgs e)
{
var border = sender as Border;
if (border == null) // if the cast to Border failed
return;
var img = border.Child as Image;
if (img == null) // if the cast to Image failed
return;
// your code
}
或者,您可以使用
它将递归搜索
Border
的子元素,以查找名为“RedPick5_Image”的元素。如果找不到具有指定名称的元素,则可能返回null。又是您!如果这行得通的话,我可以睡个安稳觉,明天在工作中度过美好的一天。你让我很高兴,如果你在这里,我会吻你。我要去打倒。。在接下来的9分钟内,我不会选择你作为正确答案。我会在早上给你评分。谢谢你,谢谢你。学习回答问题的不同方法非常有用question@user1189352我还没说完,我会补充更多的解释;)请做!我只关心学习。这个项目有很大的时间限制,所以不得不求助于stackoverflowI,我过去常常检查空值,但这真的是正确的做法吗?如果您的发件人不是您所期望的,则有人正在不应该呼叫的地方呼叫事件。Idk,只是想知道。@BrunoLM如果发送者必须始终是您期望的类型,那么您可以抛出FormatException
private void Image_MouseUp1(object sender, MouseButtonEventArgs e)
{
var border = sender as Border;
if (border == null) // if the cast to Border failed
return;
var img = border.Child as Image;
if (img == null) // if the cast to Image failed
return;
// your code
}
(Image)(sender as Border).FindName("RedPick5_Image");