WPF의 다른 모든 것과 마찬가지로 데이터 바인딩을 사용하는 것이 좋습니다.
단추에 대한 클래스를 빌드하고 XmlDataProvider
을 사용하는 대신 ItemsSource
을 해당 모음에 바인딩 할 수 있습니다. (나는 Kaxaml에서 위를 쓴 이후, 검증되지 않은)
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<XmlDataProvider x:Key="Data">
<x:XData>
<Data xmlns="">
<Button Row="0" Column="0" Text="First"/>
<Button Row="1" Column="3" Text="Second"/>
<Button Row="4" Column="4" Text="Third"/>
</Data>
</x:XData>
</XmlDataProvider>
</Page.Resources>
<DockPanel Height="300" Width="300">
<ItemsControl ItemsSource="{Binding Source={StaticResource Data}, XPath=/Data/Button}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Row="{Binding [email protected]}"
Grid.Column="{Binding [email protected]}"
Content="{Binding [email protected]}"
Click="Button_Click"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DockPanel>
</Page>
이 이벤트 핸들러는 다음과 같아야합니다 :
private void Button_Click(object sender, EventArgs e)
{
Button b = (Button) sender;
XmlElement elm = (XmlElement)b.DataContext;
int row = Convert.ToInt32(elm.GetAttribute("Row"));
int column = Convert.ToInt32(elm.GetAttribute("Column"));
// now do whatever you need to do with the row and column
}
그것이 쉽게 복사 할 수 있습니다 예를 붙여있게 때문에 XML을 사용하고 있습니다
버튼의 DataContext
에는 Click
이벤트에 사용할 모든 정보 (행 및 열, 물론 버튼과 연결해야하는 다른 속성)가 포함되어 있습니다. 이와 같은 접근 방식으로 작업할수록 WPF 관련 코드와 마크 업이 줄어들어 글을 쓸 수 있습니다.
어쨌든 행 또는 열 번호를 반환하지 않습니다. – Archie
쿨! 고마워요! – user302933
UIelement 요소 = (UIelement) Grid.InputHitTest (e.GetPosition (Grid)); row = Grid.GetRow (element); – user302933