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
控件(这里有一些循环:行、列定义等…Set
Grid.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
    ,绑定方式与绑定
    列和
    行的方式相同(如上所示)。