簡體   English   中英

WPF HandleListBoxClickEvent僅適用於列表的空白區域

[英]WPF HandleListBoxClickEvent works only on the empty space of the list

為什么HandleListBoxClickEvent僅對列表的空白空間有效? 問題是當我想刷新列表時。 在單擊某些項目時-沒有任何更新。 但是單擊列表的空白區域(選中某些項目時)-所選項目正在更新。

我認為,xaml中應該存在一些問題,因為我正在使用帶有C#代碼的現成(有效)示例。

資源:

    <UserControl.Resources>
    <Style x:Key="RedGlowItemContainer" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Border Name="IconBorder" Background="#00FFFFFF">
                        <ContentPresenter />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ListBoxItem.IsSelected" Value="True">
                            <Setter TargetName="IconBorder" Property="Border.Background" Value="#FF07A3E9" />
                            <Setter Property="Control.FontWeight" Value="Bold" />
                            <Setter Property="Control.Foreground" Value="#FFFFFFFF" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <DataTemplate x:Key="CategoryTemplate" DataType="{x:Type vm:OrderEntryViewModel}">
        <vw:MenuItemSelectorView />
    </DataTemplate>
    <mmc:OrderTemplateSelector x:Key="PanelTemplateSelector" />
</UserControl.Resources>

ViewModel:

internal class OrderEntryViewModel : ViewModelBase, IParentViewModel, IViewModelBase
{
...
public void HandleListBoxClickEvent()
    {
        if (this._selectedOrder != null)
        {
            if (this._selectedOrder.IsNew)
            {
                if (this._qty != "")
                {
                    this._selectedOrder.Quantity = int.Parse(this._qty);
                    this.SelectedQuantity = "";
                    this.CalculateTotal();
                }
            }
        }
}
...
}

xaml.cs:

public partial class OrderEntryView : System.Windows.Controls.UserControl
{
    private bool isExpended = true;

    public OrderEntryView()
    {
        this.InitializeComponent();
    }

    private void LstTicket_MouseDown(object sender, MouseButtonEventArgs e)
    {
        ((OrderEntryViewModel)base.DataContext).HandleListBoxClickEvent();
    }

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
    }
}

xaml清單:

 <ListBox Name="LstTicket" IsSynchronizedWithCurrentItem="True" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" ItemContainerStyle="{StaticResource RedGlowItemContainer}" FontSize="12" ItemsSource="{Binding Orders, Mode=TwoWay}" SelectedItem="{Binding SelectedOrder, Mode=TwoWay}" Common:ListBoxExtenders.AutoScrollToEnd="True" MouseDown="LstTicket_MouseDown" Grid.Row="1">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel HorizontalAlignment="Stretch" Background="#00FFFFFF">
                        <Grid Background="#00FFFFFF" Width="230">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="24" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="45" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="25" />
                            </Grid.RowDefinitions>
                            <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="0" Width="24" Padding="0" HorizontalAlignment="Left" Text="{Binding Quantity, StringFormat=0}" />
                            <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="1" HorizontalAlignment="Left" Padding="0" Text="{Binding DisplayName}" />
                            <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="2" Padding="0" HorizontalAlignment="Right" Text="{Binding TotalPrice, StringFormat=N2}" />
                        </Grid>
                        <ItemsControl ItemsSource="{Binding OrderModifiers}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Grid Background="#00FFFFFF">
                                        <Label Padding="0" Foreground="#FF0000FF" Margin="30,0,0,0" HorizontalAlignment="Left" Content="{Binding DisplayName}" />
                                        <Label Padding="0" Foreground="#FF0000FF" Margin="0,0,20,0" HorizontalAlignment="Right" Content="{Binding Price, StringFormat=N2}" />
                                    </Grid>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                        <ItemsControl ItemsSource="{Binding OrderSetItems}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel>
                                        <Grid Background="#00FFFFFF" Width="230">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="24" />
                                                <ColumnDefinition Width="*" />
                                                <ColumnDefinition Width="45" />
                                            </Grid.ColumnDefinitions>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="15" />
                                            </Grid.RowDefinitions>
                                            <TextBlock Style="{DynamicResource StyleStrikethrough}" Margin="10,0,0,0" Grid.Column="0" Width="24" Padding="0" HorizontalAlignment="Left" Text="{Binding Quantity, StringFormat=0}" />
                                            <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="1" HorizontalAlignment="Left" Padding="0" Text="{Binding DisplayName}" />
                                            <TextBlock Style="{DynamicResource StyleStrikethrough}" Grid.Column="2" Padding="0" HorizontalAlignment="Right" Text="{Binding TotalPrice, StringFormat=N2}" />
                                        </Grid>
                                        <ItemsControl ItemsSource="{Binding OrderSetModifiers}">
                                            <ItemsControl.ItemTemplate>
                                                <DataTemplate>
                                                    <Grid Background="#00FFFFFF">
                                                        <Label Padding="0" Foreground="#FF0000FF" Margin="30,0,0,0" HorizontalAlignment="Left" Content="{Binding DisplayName}" />
                                                        <Label Padding="0" Foreground="#FF0000FF" Margin="0,0,20,0" HorizontalAlignment="Right" Content="{Binding Price}" />
                                                    </Grid>
                                                </DataTemplate>
                                            </ItemsControl.ItemTemplate>
                                        </ItemsControl>
                                    </StackPanel>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

沒有一個很好的, 最小的完整的代碼示例來清楚地說明問題,嘗試提供一個有效的代碼示例是不切實際的。

但是我可以告訴您基本問題是什么:當用戶單擊ListBox中的實際項目時,項目本身會處理用戶輸入。

您可以預覽鼠標事件(例如,請參見Mouse.PreviewMouseDown Attached Event ,請密切注意已記錄的警告),也可以在列表項本身中處理MouseDown事件。 請參閱例如,當用戶單擊ListViewItem時如何觸發事件或命令? 有關此的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM