0

ボタンを作成するための observablecollection があります。問題は、これらのボタンのそれぞれが同じイベント ハンドラーを呼び出すことです。各ボタンに独自の一意のIDを付けて、互いに区別できるようにしようとしています。ボタン要素を作成するために使用されるコードは

public class button
{
    public bool IsEmpty { get; set; } 
    public int ID {get; set;}

    public button(int button_Number)
    {
        IsEmpty = true;
        ID = button_Number;

    }
}

I は、次のコードで observablecollection に追加されます

        ButtonCollection = new ObservableCollection<cChipVM>();

        for ( int i = 0 ; i < iNumChips ; ++i )
        {
            ButtonCollection.Add( new button(i) );

        }

ボタンのxmlは次のとおりです

 <DataTemplate x:Key="ButtonTemplate">
        <Button x:Name="Button" Uid="{Binding Path=ID}" Click="Button_Click" BorderBrush="Black" BorderThickness="1" Margin="7" Width="25" Height="25" ClickMode="Press" Opacity="0.9" Focusable="False" IsHitTestVisible="True" AllowDrop="True" IsTabStop="False">
            <Button.Style>                    
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=IsEmpty}" Value="false">
                            <Setter Property="Button.Background">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#FF5ED426" Offset="0"/>
                                        <GradientStop Color="White" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=IsEmpty}" Value="true">
                            <Setter Property="Button.Background">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#FF1766F0" Offset="0"/>
                                        <GradientStop Color="White" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>

                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </DataTemplate>

この方法で Uid を設定しようとすると、システムがクラッシュします。これを修正する方法に関する推奨事項、または各ボタンが一意の ID を持つことができるその他の解決策

4

1 に答える 1

1

Button.Tag プロパティを使用して ID を保存し、ハンドラーで Tag の値を調べることができます。

<Button Tag="{Binding Path=ID}" Click="Button_Click" BorderBrush="Black" BorderThickness="1" Margin="7" Width="25" Height="25" ClickMode="Press" Opacity="0.9" Focusable="False" IsHitTestVisible="True" AllowDrop="True" IsTabStop="False">

UPDATE : ボタンクリックハンドラ

public void Button_Click(object sender,EventArgs e)
{ 
      var myButton = (Button)sender;
      int id = Convert.ToInt32(myButton.Tag);
}
于 2013-05-09T16:16:26.193 に答える