【问题标题】:Windows phone listbox - Hold item eventWindows 手机列表框 - 保留项目事件
【发布时间】:2014-08-28 11:46:47
【问题描述】:

我的应用有两个 ListBox。我需要,当用户持有我的ListBox1 中的项目时,相同的项目应该出现在ListBox2 中。 我当前的代码有效,但我需要在保留项目之前选择项目(触摸项目)。我知道原因是我正在使用SelectedItem,但是对于举行事件怎么办?

我的代码:

    private void holdListAdd(object sender, System.Windows.Input.GestureEventArgs e)
    {

        if (List1.SelectedItem != null)
        {
            Fields fi = (Fields)this.List1.SelectedItem;
           // fi.Quantity = txtQuantity.Text;



            if (List2.Items.Contains(List1.SelectedItem))
            {
                MessageBox.Show("Esse item já foi adicionado!");

            }

            else
            {

                List2.Items.Add(fi);
                MessageBox.Show("Item Adicionado com sucesso!");
            }
        }

    }

我的 XAML:

<ListBox Name="List1" ItemsSource="{Binding Items}" Hold="holdListAdd">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Margin="0,0,0,17" Width="432" Height="78">
                                <TextBlock Grid.Column="0" Text="{Binding FNome}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                                <TextBlock Grid.Column="1" Text="{Binding FEstado}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

 <ListBox Name="List2">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Margin="0,0,0,17" Width="432" Height="78">
                                <TextBlock Grid.Column="0" Text="{Binding FNome}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                                <TextBlock Grid.Column="1" Text="{Binding FEstado}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

【问题讨论】:

    标签: c# listbox windows-phone


    【解决方案1】:

    不要将保持事件处理程序附加到ListBox,而是尝试将事件处理程序附加到ListBoxItemListBoxDataTemplate内的控件,例如:

    <ListBox Name="List1" ItemsSource="{Binding Items}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Hold="holdListAdd" Margin="0,0,0,17" Width="432" Height="78">
                    <TextBlock Grid.Column="0" Text="{Binding FNome}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                    <TextBlock Grid.Column="1" Text="{Binding FEstado}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
    

    然后就可以从sender参数中获取触发hold事件的item了:

    private void holdListAdd(object sender, System.Windows.Input.GestureEventArgs e)
    {
        var dc = ((FrameworkElement)sender).DataContext;
        Fields fi = (Fields)dc;
        ....
    }
    

    【讨论】:

    • 我必须更改我的 XAML 文件吗?
    • 如果我能看到你当前的 ListBoxXAML 标记会更容易判断@
    • 按照您的建议进行了编辑,但我需要在保留项目之前选择项目。如果我只拿着物品,什么都不会发生。
    • 我很笨!我忘了删除第一个“如果”。非常感谢!
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多