2015-11-28 28 views
0

我有一个5x4的网格,我在那里放置按钮,以后我将添加图片。我需要以某种方式知道此按钮位于此网格中的位置,因此我可以用此Plus图像替换添加的图片。或者,如果我选择多张图片,要知道从哪个位置,填补了网格them.This是我的网格,模板:把按钮的位置放在一个网格中

<Grid> 
    <ItemsControl x:Name="myItems" > 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,50,0,0" > 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="1*" /> 
         <ColumnDefinition Width="1*" /> 
         <ColumnDefinition Width="1*" /> 
         <ColumnDefinition Width="1*" /> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="1*" /> 
         <RowDefinition Height="1*" /> 
         <RowDefinition Height="1*" /> 
         <RowDefinition Height="1*" /> 
         <RowDefinition Height="1*" /> 
        </Grid.RowDefinitions> 
       </Grid> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Button Click="Add_Picture"> 

       <Border Width="100" Height="100" BorderThickness="1" BorderBrush="Black" Margin="3" Padding="5"> 
        <!-- <Canvas Margin="-1,-1,0,0" Width="90" Height="90" Name="cCanvas" MouseDown="cCanvas_MouseDown">--> 
        <Canvas Margin="-1,-1,0,0" Width="90" Height="90" Name="cCanvas"> 
         <Canvas.Background> 
          <ImageBrush Stretch="UniformToFill" ImageSource="{Binding ImagePath}"/> 
         </Canvas.Background> 


         <!-- <Grid Name="SquareSelectedIndicator" Visibility="{Binding IsSelected, Converter={StaticResource BoolToVis}, FallbackValue=Hidden}" Width="30" Height="30" >--> 

        </Canvas> 
        <Border.Style> 
         <Style TargetType="{x:Type Border}"> 
          <Setter Property="BorderBrush" 
     Value="Black" /> 
          <Style.Triggers> 
           <Trigger Property="IsMouseOver" 
      Value="True"> 
            <Setter Property="BorderBrush" 
      Value="Red" /> 
           </Trigger> 
          </Style.Triggers> 
         </Style> 
        </Border.Style> 
       </Border> 
       </Button> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

比如这里我想借此(X,Y)。这可能吗? grid

+0

我可以想象的唯一的事情是在网格的元素上使用(可能是两级深度)foreach,在这里你可以比较元素是否具有某个属性(如名称),并获取Grid.Row和Grid.Column属性一旦匹配 –

+0

所以你想要访问'Add_Picture'事件处理程序中的行和列索引吗? – christoph

+0

是的,对于每个调用该事件的按钮都是如此。他的初始协调 – gneric

回答

1

我试过你的代码,它没有产生你发布的视图。所有按钮都放在相同的位置上。

为了获取视图你贴我用了一个UniformGrid作为ItemsPanel与4

 <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Columns="4" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 

因此,了解这个Columns值,你可以使用Add_Picture处理程序是这样的:

private void Add_Picture(object sender, RoutedEventArgs e) 
    { 
     Button clickedButton = sender as Button; 
     if (clickedButton != null) 
     { 
      object displayedItem = clickedButton.DataContext; 
      int index = this.myItems.Items.IndexOf(displayedItem); 

      int x = index % 4; 
      int y = index/4; 


      MessageBox.Show("x: " + x + " | y: " + y); 
     } 
    } 

设我知道这是否适合您的需求。

+0

它工作出色,正是我所需要的。谢谢 – gneric

+0

很高兴听到:-) – christoph

相关问题