Canvas方法在canvas标签中总是工作的,但是当你试图在itemsControl中使用它们时,它们有时会停止工作。下面是一个示例:
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Click="Button_Click">Text</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
xaml.cs文件
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(Canvas.GetTop(sender as Button).ToString());
}
这里的消息框返回南和我不知道的原因。也不能使用SetTop或left方法。你能帮忙吗?
编辑:****这里还有一件有趣的事情如果我给予一个元素命名,它确实有效,但我不希望这样,因为名称在itemTemplate中不可用。
代码如下:
<ItemsControl ItemsSource="{Binding SomeList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<Button x:Name="Btn" Click="Button_Click">Text</Button>
</ItemsControl>
xaml.cs文件
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(Canvas.GetTop(Btn).ToString());
}
1条答案
按热度按时间qoefvg9y1#
要在
ItemTemplate
中定义元素的绝对位置,您应该将容器的Canvas.Top
attached属性绑定到SomeList
集合中对象类型的属性:SomeList
应该是IEnumerable<T>
,其中类型T
具有类型double
的Top
属性: