1

これはおそらく非常に簡単な修正ですが、私はイベントの操作に不慣れなので、質問するだけです.

ListBoxItems を含む ListBox があります。これらの ListBoxItems はデータ ソースにバインドされるため、変更されます。これらの ListBoxItem のいずれかで MouseDown アクションが実行されたときに、MouseDown イベントを発生させる必要があります (ドラッグ アンド ドロップを行っているため)。値が変化しているため、次のように XAML でイベントを結び付けることは期待できません。

<ListBox Name="ListBox1">
    <ListBoxItem MouseDown="MouseDownEventName">Item A</ListBoxItem>
    <ListBoxItem MouseDown="MouseDownEventName">Item B</ListBoxItem>
    <ListBoxItem MouseDown="MouseDownEventName">Item C</ListBoxItem>
</ListBox>

これは、静的な値があれば簡単ですが、ListBox の値が変化するため、次の XAML を記述したいと思います。

 <ListBox Name="ListBox1" MouseDown="MouseDownEventName">
     //Binded Values
</ListBox>

次に、ListBoxItem が選択されると、この MouseDownEventName までイベントがバブルされ、その時点で ListBox1.SelectedItem を取得できます。問題は、今これを試しているところですが、うまくいきません。MouseDown を処理する次のコードがあります。これは、アイテムが MouseDown されたことを示すために、現時点ではラベルの内容を書き換えているだけです。

    public partial class UserControl1 : UserControl
    {
    public UserControl1()
    {
        InitializeComponent();
    }

    private void ListBox_MouseDown(object sender, RoutedEventArgs e)
    {
        ListBox box = (ListBox)sender;
        if (box != null && box.SelectedItem != null)
        {

            DragDrop.DoDragDrop(box, ItemListBox.SelectedItem, DragDropEffects.Move);
            label1.Content = "MouseDown Event Fired";
        }
    } 
}
4

1 に答える 1

3

XAML を使用すると、フォームに含まれるさまざまな型のテンプレートを提供できます。たとえば、この場合、ListBoxItem が特定のイベント ハンドラーを起動するように指定できます。これは、XAML マークアップ コードの大部分です (詳細はこちら:項目がテンプレート化されているときに ListboxItem をクリックしてキャッチする方法は? )

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown"/>
        </Style>
    </ListBox.ItemContainerStyle>
...
</ListBox>

前に確認するもう 1 つのことは、DragDrop.DoDragDrop() メソッドの呼び出しを別のものに変更して、問題がそのメソッドに関係しているかどうかを確認することです。ラベルの内容が変わっているので、その方法と関係があると思います。

于 2011-01-18T18:46:18.170 に答える