我试图从生成的控件中获取行和列的位置,并将其放置在ControlTemplate的代码中。
ControlTemplate看起来像这样:
<Window.Resources>
<ControlTemplate x:Key="myButtonTemplate" TargetType="Button">
<Canvas x:Name="myButton" Background="#FFCFCECE" AllowDrop="True"
Drop="myButton_Drop" Opacity="1" MouseDown="myButton_MouseDown" >
<Button x:Name="childButton"
Height="30" Width="30"
Canvas.Top="10" Canvas.Right="10" BorderThickness="0" >
<Button.Background>
<ImageBrush ImageSource="Resources/pic.png"/>
</Button.Background>
</Button>
<Label x:Name="nameLabel" Content="<empty>"
Canvas.Bottom="35" Canvas.Left="10" FontSize="18" FontWeight="Bold" />
</Canvas>
</ControlTemplate>
</Window.Resources>
正如您所看到的,它有一种接受鼠标点击的方法:myButton_MouseDown
控件在启动时放在网格中,如下所示:
// Add a button for every grid
for (int r = 0; r < myGrid.RowDefinitions.Count; r++)
{
for (int c = 0; c < myGrid.ColumnDefinitions.Count; c++)
{
Button someButton = new Button();
someButton.Template = (ControlTemplate)FindResource("myButtonTemplate");
someButton.Name = "sb_" + r + "_" + c;
someButton.SetValue(Grid.RowProperty, r);
someButton.SetValue(Grid.ColumnProperty, c);
myGrid.Children.Add(someButton);
}
}
我正试图找到点击网格的位置,但我无法弄明白。这是我最接近的,但是row和col总是0。
private void soundButton_MouseDown(object sender, MouseButtonEventArgs e)
{
Canvas canvas = (Canvas)sender;
int col = Grid.GetColumn((UIElement)canvas);
int row = Grid.GetRow((UIElement)canvas);
}
关于我做错了什么的任何建议?
答案 0 :(得分:1)
试试这个
private void myButton_MouseDown(object sender, MouseButtonEventArgs e)
{
Canvas canvas = (Canvas)sender;
int col = Grid.GetColumn((UIElement)canvas.TemplatedParent);
int row = Grid.GetRow((UIElement)canvas.TemplatedParent);
}