2012-01-09 21 views
0

我的Grid在設計時創建了2行和2列(總數:4個單元格)。我向每個單元添加了4個Image控件(這裏的一些Loop:行,列定義等...設置Grid.SetRow(imageControl, gridRowCell); Grid.SetColumn(imageControl, gridColumnCell);),其中運行時如何在運行時實例化網格中的選定UIElement(圖像)?

只是爲了測試的目的,我想知道是否有什麼我可以用來返回特定的選擇UIElement在我的情況下Image選擇時?

總結:

  • Grid每一個細胞都只有1 Image控制實例化在運行時。

目的:

我在這裏的目的是選擇藉此空當發現孩子圖像的來源,因爲很快我會用一個新的來代替該空圖像。

請給我建議Gridevent以表示您的建議代碼。 Grid沒有ClickSelectionChanged事件。

原因我使用網格和動態添加RowDefinition; ColumnDefinition因爲我認爲ListBox不能在有界集合顯示中應用不同的項目屬性(即顯示不同大小的圖像),但Grid可以執行RowSpan和ColumnSpan,這些RowSpan和ColumnSpan可以擴展到跨越的行或列。

例如用戶選擇佈局格式(4列3行; 5列& 3行等),這使得在設計時難以創建。

簡而言之:

所有我想要的是顯示在不同尺寸的圖像採集項目,並希望仍然可以使用綁定

enter image description here

+0

見[MSDN](http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspx)用於在網格'文檔(和事件的列表)控制。請注意['MouseDown'](http://msdn.microsoft.com/en-us/library/system.windows.uielement.mousedown.aspx)和['MouseLeftButtonDown'](http://msdn.microsoft.com /en-us/library/system.windows.uielement.mouseleftbuttondown.aspx)事件存在,這可能在這裏使用。 – 2012-01-09 10:11:05

回答

1

如果你想選擇你應該使用做一個ListBox

例如

  1. 創建爲你的形象一類有一個屬性的簽名是這樣的:

    Link : string 
    X : int 
    Y : int 
    
  2. 建立一個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可以更改。

如果您希望它可點擊,您還可以將圖像包裹在DataTemplateButton中。

+0

我剛剛添加了「Reason」,爲什麼我使用Grid而不是ListBox。希望我的問題變得更清楚。對不起,我的英語不好。 – Raf 2012-01-09 14:03:55

+0

我更新了我的關注,並使用Grid(應用RowSpan和ColumnSpan)添加了示例輸出 – Raf 2012-01-09 14:37:24

+0

@ user1078782:仍然可以修改網格(可以替換模板或使用TreeHelpers獲取當前實例),並且可以將「 ColumnSpan'和'RowSpan',就像你可以綁定Column和Row一樣(如上所示)。 – 2012-01-09 15:06:55

1

沒有選擇在Grid的項目,所以如果你想選擇的項目有三種方法:

  1. ListBox更換Grid和使用SelectedItem(S)財產

  2. 將圖像放置在可點擊/可選控件(如按鈕)中,以便您可以使用單擊事件或監視IsChecked屬性。

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

+0

它不應該是'選擇器'嗎? 'ItemsControl'沒有選擇。 – 2012-01-09 10:21:03

+0

@ H.B。 - 正確。謝謝! – 2012-01-09 10:25:06

+0

@Erno我更新了我的問題,並使用Grid添加了示例輸出(應用RowSpan和ColumnSpan) – Raf 2012-01-09 14:37:16

相關問題