0

リストボックスのselectedItemに問題があります。リストボックスの項目を選択すると、追加ボタンをクリックして正常に動作している画像 (selectedItem の値を含む) を選択するポップアップが表示されます。しかし、追加ボタンをクリックして画像を選択した後、画像が間違っていることに気づき、追加ボタンをもう一度クリックして別の画像を選択すると、selectedItemがnullであるため問題が発生しました。対処方法は?selectedItemの値を維持するには? あなたの与えられたコードは大歓迎です。

if (lstDinner.SelectedItem != null)
{
  output = _imageInserter.InsertImage(imageName, lstDinner.SelectedItem.ToString());
  PopupToysImage.IsOpen = true;
  strDinner.DinnersDetails = lstDinner.SelectedItem.ToString()

}

else
{
 // strDinner.DinnersDetails = null that cause a problem.
 output = _imageInserter.InsertImage(imageName, strDinner.DinnersDetails);
 PopupDinnerImage.IsOpen = true;
 }

ここで更新:

WPF:

<ListBox Style="{DynamicResource ListBoxStyle1}"  DisplayMemberPath="Dinner" BorderBrush="#FFF0F0F0"  x:Name="lstDinner" FontSize="20" HorizontalAlignment="Left" Margin="0,110,0,72.667" Width="436" SelectionMode="Extended"  PreviewMouseLeftButtonDown="MouseDownHandler"  ScrollViewer.CanContentScroll="True" UseLayoutRounding="False" KeyDown="lstDinner_KeyDown" MouseDoubleClick="lstDinner_MouseDoubleClick" >

C# でのイベント:

    private void MouseDownHandler(object sender, MouseButtonEventArgs e)
    {
        var parent = (ListBox)sender;

        _dragSource = parent;

        var data = GetObjectDataFromPoint(parent, e.GetPosition(parent));

        if (e.ChangedButton == MouseButton.Left && e.ClickCount == 1)
        {
            if (data != null)
                DragDrop.DoDragDrop(parent, data, DragDropEffects.Move);
        }
    }


    private void lstDinner_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Delete)
        {
            RemoveItemsFromDatabase();
        }
    }

        private void lstDinner_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        _dinnerImage = new DinnerImageExtractor();
        BitmapImage getImage = new BitmapImage();

        if (lstDinner.SelectedItem != null)
        {
            getImage = _dinnerImage.GetDinnerImages(lstDinner.SelectedItem.ToString());

            if (getImage != null)
            {
                DinnerImagePopup.Source = getImage;
            }
            else
            {
                DinnerImagePopup.Source = new BitmapImage(new Uri("/DinnerApplicationWPF;component/Menu/Images/noImage-icon-pink.png", UriKind.Relative));

            }

            PopupDinnerImage.IsOpen = true;
          //  PopupInstrcution.IsOpen = false;

        }
    }
4

3 に答える 3

0

画像を選択している間、ListBox を無効にしていますか?

もしそうなら、ListBoxを無効にするだけで、SelectedItemがnullに設定されると思います。

編集:

ListBox がダブルクリックされたときではなく、リスト内の項目がダブルクリックされたときにイベントハンドラー (マウスのダブルクリックなど) が発生するようにしたいと思います。XAML を次のように変更する必要があります。

    <ListBox Style="{DynamicResource ListBoxStyle1}" DisplayMemberPath="Dinner" BorderBrush="#FFF0F0F0"  x:Name="lstDinner" FontSize="20" HorizontalAlignment="Left" Margin="0,110,0,72.667" Width="436" SelectionMode="Extended"  PreviewMouseLeftButtonDown="MouseDownHandler"  ScrollViewer.CanContentScroll="True" UseLayoutRounding="False" KeyDown="lstDinner_KeyDown">
        <ListBox.Resources>
            <Style TargetType="ListBoxItem">
                <EventSetter Event="MouseDoubleClick" Handler="lstDinner_MouseDoubleClick" />
            </Style>
        </ListBox.Resources>
    </ListBox>

このコードを実行すると、選択したアイテムが null になりません。

于 2013-07-11T18:49:25.307 に答える