如何在运行时实例化网格中获取所选的UIElement(图像)?

时间:2012-01-09 10:00:00

标签: c# .net wpf silverlight xaml

我的Grid在设计时创建了2行2列(总计:4个单元格)。我在运行时中为每个单元格添加了4个Image控件(这里有一些循环:行,列定义等...设置Grid.SetRow(imageControl, gridRowCell); Grid.SetColumn(imageControl, gridColumnCell);)。

仅出于测试目的,我想知道在我选择UIElement时,我可以使用哪些内容返回特定选定的Image

要点:

  • Grid中的每个单元格在运行时仅实例化了1个Image控件。

目的:

我的目的是在选择时清空该子图像的来源,因为很快我将用新图像替换该空图像。

请在event Grid {{}}}中建议您放置建议的代码。 Grid没有ClickSelectionChanged事件。

原因我使用Grid并动态添加RowDefinition; ColumnDefinition因为ListBox我认为不能在有界集合显示中应用不同的项属性(即显示不同大小的图像),但Grid可以做RowSpan和ColumnSpan,它们可以伸展到跨越的行或列。

例如用户选择布局格式(4列和3行; 5列和3行等...),这使得在设计时更难创建。

简而言之:

我想要的只是显示不同大小的图像集合项目,希望仍然可以使用Binding来完成

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您想要选择,请使用ListBox

e.g。

  1. 为您的图片创建一个具有如下属性签名的类:

    Link : string
    X : int
    Y : int
    
  2. 设置ListBox包含绑定,ItemsPanelGrid

    <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>
    
  3. 您现在可以选择图片,ListBox.SelectedItem可以投放到您的班级,Link可以更改。

    如果您想要点击图片,也可以将图片包裹在DataTemplate的{​​{1}}中。

答案 1 :(得分:1)

Grid中没有选择项目,因此如果您想获得所选项目,有三种方式:

  1. Grid替换为ListBox并使用SelectedItem(s)属性

  2. 将图像放入可点击/可选择的控件(如按钮)中,以便您可以使用click事件或监视IsChecked属性。

  3. 使用MouseDown/Up控件的Image个事件。