2017-05-08 46 views
0

我試圖弄清楚ColumnDefinition是否知道它在Grid之內的位置。ColumnDefinition在網格中的位置

我有3列如下:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Name="Left" Width="120" MouseEnter="Grid_MouseEnter" MouseLeave="Grid_MouseLeave"/> 
    <ColumnDefinition/> 
    <ColumnDefinition Width="120" MouseEnter="Grid_MouseEnter" MouseLeave="Grid_MouseLeave"/> 
</Grid.ColumnDefinitions> 

<view:Button Grid.Column="0" x:Name="GoLeft" Visibility="Hidden"/> 
<view:MarkBox Grid.Column="1" x:Name="MarkBox1" 
       MinHeight="110" MinWidth="100" Width="100" Height="110"/> 
<view:Button Grid.Column="2" x:Name="GoRight" Visibility="Hidden"/> 

而且我想申請兩個相同MouseEnter功能,把執行不同的操作,如果它是向左或向右ColumnDefinitionColumnDefinition是否有包含Grid內的編號或位置的屬性?

+0

您可以檢查[這裏](https://msdn.microsoft.com/en-us/library /system.windows.controls .columndefinition(v = vs.110).aspx#Properties),答案似乎是:不。但是你可以用Sender.Parent.ColumnDefinitions.IndexOf() –

+0

@Haddi查找它,你發現我的解決方案有用,還是需要更多幫助? –

+0

嗨,我還沒有嘗試過,我會保持更新,tnx! –

回答

0

GridColumn上的鼠標事件不適用於我。

但是Grid的每個UIElement子都可以有一個Mouse事件處理程序。 例如:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 

    <Border Grid.Column="0" Background="Red" MouseEnter="OnMouseEnter"/> 

    <Grid Grid.Column="1" Background="Green" MouseEnter="OnMouseEnter"/> 

    <Rectangle Grid.Column="2" Fill="Blue" MouseEnter="OnMouseEnter"/> 
</Grid> 

正如你所看到的,我附上相同的事件處理程序MouseEnter事件上不同的控件:一個Border,一個Grid,一個Rectangle ...每一個控件相對於父位置GridGrid.RowGrid.Column),所以在事件處理程序,您可以檢查sender的AttachedProperty:

private void OnMouseEnter(object sender, MouseEventArgs e) 
{ 
    var element = sender as UIElement; 

    var columnIndex = element.GetValue(Grid.ColumnProperty); 

    // use columnIndex somehow... 
} 
相關問題