我的WPF应用程序中有一个Ellipse
。我想在双击时更改其轮廓的颜色。我找到了this(旧)教程,通过使用可用的MouseDown
事件并在事件处理程序中检查两个ClickCount
来完成此工作。这是我问题的最简单的解决方案,我想在creating an empty button Control Template之前尝试让它工作
但是,我无法在我的代码隐藏文件中找到单击的椭圆。据说这可以在教程中使用,但我想知道我是否遗漏了任何东西
这是包含椭圆的代码。它是网格的第3列:
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Grid.Column="3">
<StackPanel Orientation="Vertical" Margin="3,1" Background="GhostWhite">
<ItemsControl Name="FlowLinkItems" ItemsSource="{Binding FlowLinkList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Height="40">
<Ellipse Name="FlowLinkEllipse" Stroke="BlueViolet" Height="38" VerticalAlignment="Center" MouseDown="Ellipse_MouseDown"/>
<TextBlock TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Message}"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ScrollViewer>
在本教程中,代码隐藏方法的工作原理如下:
private void Ellipse_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
FlowLinkEllipse.Stroke = "Red";
}
}
我看到的错误是:
当前上下文中不存在名称“FlowLinkEllipse”
如果这种方法不可行,我会接受尽可能简单的建议(我还是WPF新手,我的应用程序唯一能处理的就是双击)。
注意:我的代码后面有这一行,并且工作正常
FlowLinkItems.MouseLeftButtonUp += FlowLinkItems_MouseLeftButtonUp;
答案 0 :(得分:2)
正如@Magus所说,你无法引用代码隐藏中的项目,即DataTemplate
内的项目。这应该没有问题,但是:sender
将包含对椭圆的引用:
private void Ellipse_MouseDown(object sender, MouseButtonEventArgs e)
{
if (ellipse as sender == null || e.ClickCount < 2)
return;
var ellipse = (Ellipse)sender;
ellipse.Stroke = System.Windows.Media.Brushes.Red;
}