0

私はUniformGridバインディングを設定しています。ソースは でSquare[,]UniformGridはオブジェクトで満たされていButtonます。

これが私がしたことです: double 配列とグリッド間のデータバインディング

これをSystem.InvalidOperationExceptionしようとすると、次のようになります。

private void OnClickButton(object sender, RoutedEventArgs e)
{
    Button b = (Button)sender;
    UniformGrid grid = ItemControlGrid.ItemsPanel.LoadContent() as UniformGrid;
    int rows = grille.Rows;
    int columns = grille.Columns;
    UIElementCollection children = grid.Children; // I get the Exception here
    int index = children.IndexOf(b);
    int row = index / columns;
    int column = index % rows;
}

ここに私の XAML があります:

<ItemsControl Background="Gray" Margin="0" Width="800" Height="800"  
    x:Name="ItemControlGrid"
    ItemsSource="{Binding MapGrid}"
    ItemTemplateSelector="{StaticResource selector}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid 
                IsItemsHost="true"
                x:Name="My_UniformGrid" Rows="25" Columns="25"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
 </ItemsControl>

なぜ私はこれを得るのExceptionですか?

4

1 に答える 1

0

例外が発生する行を次のように変更します。

ItemCollection children = ItemControlGrid.Items;

残りのコードは問題なくコンパイルされるはずです。grille私はそれが実際にあると仮定しgridます。

<ItemsControl Background="Gray" Margin="0" Width="800" Height="800"  
    x:Name="ItemControlGrid">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid IsItemsHost="true" Rows="25" Columns="25"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <!-- First two elements are just dummies to test the result-->
    <Control />
    <Image />
    <Button Click="Button_Click_1" />
</ItemsControl>

コードビハインド:

void Button_Click_1(object sender, RoutedEventArgs e)
{
    var b = (Button) sender;
    var grid = ItemControlGrid.ItemsPanel.LoadContent() as UniformGrid;
    var rows = grid.Rows;
    var columns = grid.Columns;
    var children = ItemControlGrid.Items;
    var index = children.IndexOf(b);
    var row = index/columns;
    var column = index%rows;
    //column will be 2
}
于 2013-01-04T18:08:03.777 に答える