C# 如何在运行时实例化网格中选定的UIElement(图像)?
我的C# 如何在运行时实例化网格中选定的UIElement(图像)?,c#,.net,wpf,silverlight,xaml,C#,.net,Wpf,Silverlight,Xaml,我的网格在设计时创建了两行两列(共4个单元格)。我在每个单元格中添加了4个Image控件(这里有一些循环:行、列定义等…SetGrid.SetRow(imageControl,gridRowCell); SetColumn(imageControl,gridColumnCell);)在运行时 仅出于测试目的,我想知道是否有什么东西可以用来返回特定的选定UIElement,在我的例子中,选择时返回图像 摘要: 网格中的每个单元格在运行时仅实例化了1个图像控件 目的: 我在这里的目的是在选中时清
网格
在设计时创建了两行两列(共4个单元格)。我在每个单元格中添加了4个Image
控件(这里有一些循环:行、列定义等…SetGrid.SetRow(imageControl,gridRowCell);
SetColumn(imageControl,gridColumnCell);
)在运行时
仅出于测试目的,我想知道是否有什么东西可以用来返回特定的选定UIElement
,在我的例子中,选择时返回图像
摘要:
在运行时仅实例化了1个网格中的每个单元格
控件图像
网格的事件中放置您建议的代码<代码>网格
没有单击
或选择更改
事件
原因我使用网格并动态添加行定义;ColumnDefinition,因为我认为ListBox不能在有边界的集合显示中应用不同的项属性(即显示不同大小的图像),但Grid可以执行RowSpan和ColumnSpan,这可以延伸到跨行或跨列
例如用户选择一种布局格式(4列和3行;5列和3行等),这使得在设计时更难创建
简而言之:
我只想以不同的大小显示图像集合项,希望仍然可以使用绑定来完成
如果需要选择,应使用列表框
e、 g
为图像创建一个具有如下属性签名的类:
Link : string
X : int
Y : int
设置带有绑定的列表框
,以及作为网格的项目面板
:
<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>
现在,您可以选择图像和列表框。SelectedItem
可以强制转换到您的类中,并且链接可以更改
如果希望图像可单击,也可以将其包装在数据模板中的按钮中。网格中没有项目选择
,因此,如果要获取所选项目,有三种方法:
将网格
替换为列表框
,并使用SelectedItem
(s)属性
将图像置于可单击/可选择的控件(如按钮)中,以便可以使用单击事件或监视IsChecked属性
使用Image
控件的MouseDown/Up
事件
有关表格
控件上的文档(和事件列表),请参阅。请注意,存在和事件,这在这里可能有用。它不应该是选择器
ItemsControl
没有选择。@Erno我更新了我的关注点,并使用Grid(应用RowSpan和ColumnSpan)添加了示例输出@user1078782-在某种程度上,您更改了问题,请不要这样做,因为其他人将更难找到此问题并理解答案。即使你担心布局(正如你所说的),我的答案仍然是一样的。选项1有点难,但仍然有效(见H.B.的答案)。选项2非常简单。@Erno我没有改变问题。我只是补充了更多关于我的工作的细节concern@user1078782-因此,您将其从“如何捕获选择?”更改为“如何显示此布局?”。我只是添加了使用网格而不是列表框的“原因”。希望我的问题变得更清楚。抱歉我的英语不好。我更新了我的问题,并使用网格添加了示例输出(应用RowSpan和ColumnSpan)@user1078782:Can仍然可以修改网格(例如,您可以替换模板或使用TreeHelpers获取当前实例)您可以绑定列span
和行span
,绑定方式与绑定列和行的方式相同(如上所示)。