我的Grid
在设计时创建了2行2列(总计:4个单元格)。我在运行时中为每个单元格添加了4个Image
控件(这里有一些循环:行,列定义等...设置Grid.SetRow(imageControl, gridRowCell);
Grid.SetColumn(imageControl, gridColumnCell);
)。
仅出于测试目的,我想知道在我选择UIElement
时,我可以使用哪些内容返回特定选定的Image
?
要点:
Grid
中的每个单元格在运行时仅实例化了1个Image
控件。目的:
我的目的是在选择时清空该子图像的来源,因为很快我将用新图像替换该空图像。
请在event
Grid
{{}}}中建议您放置建议的代码。 Grid
没有Click
或SelectionChanged
事件。
原因我使用Grid并动态添加RowDefinition; ColumnDefinition因为ListBox我认为不能在有界集合显示中应用不同的项属性(即显示不同大小的图像),但Grid可以做RowSpan和ColumnSpan,它们可以伸展到跨越的行或列。
例如用户选择布局格式(4列和3行; 5列和3行等...),这使得在设计时更难创建。
简而言之:
我想要的只是显示不同大小的图像集合项目,希望仍然可以使用Binding来完成
答案 0 :(得分:1)
如果您想要选择,请使用ListBox
。
e.g。
为您的图片创建一个具有如下属性签名的类:
Link : string
X : int
Y : int
设置ListBox
包含绑定,ItemsPanel
为Grid
:
<ListBox ItemsSource="{Binding ImageCollection}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Grid.Column" Value="{Binding X}"/>
<Setter Property="Grid.Row" Value="{Binding Y}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Link}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您现在可以选择图片,ListBox.SelectedItem
可以投放到您的班级,Link
可以更改。
如果您想要点击图片,也可以将图片包裹在DataTemplate
的{{1}}中。
答案 1 :(得分:1)
Grid
中没有选择项目,因此如果您想获得所选项目,有三种方式:
将Grid
替换为ListBox
并使用SelectedItem
(s)属性
将图像放入可点击/可选择的控件(如按钮)中,以便您可以使用click事件或监视IsChecked属性。
使用MouseDown/Up
控件的Image
个事件。