【问题标题】:Listview control template. How to add an event to command?Listview 控件模板。如何将事件添加到命令?
【发布时间】:2017-04-24 01:35:44
【问题描述】:
<ListView 
                    x:Name="ListViewPoducts"
                    SelectionMode="Single"
                    ItemsSource="{Binding ProductGroups}"
                    SelectedItem="{Binding SelectedProductGroup}"
                    ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                    ScrollViewer.VerticalScrollBarVisibility="Auto"
                    Background="{StaticResource NouvemLightBackgroundBrush}">

            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Vertical" />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>

            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="Width" Value="Auto"/>
                    <Setter Property="Height" Value="Auto"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListViewItem">
                                <Border  Background="Transparent" >
                                    <Button Name="button" Style="{StaticResource StyleButtonTouchscreenMenu}" IsHitTestVisible="False">
                                        <Grid>
                                            <TextBlock Text="{Binding Name}" 
                                       FontSize="{Binding Source={x:Static global:ApplicationSettings.TouchscreenMenuButtonFontSize}}"
                                       HorizontalAlignment="Center" 
                                       VerticalAlignment="Center" 
                                       TextAlignment="Center" 
                                       TextWrapping="Wrap" />
                                        </Grid>
                                        <i:Interaction.Triggers>
                                            <i:EventTrigger EventName="PreviewMouseUp">
                                                <command:EventToCommand Command="{Binding GroupSelectedCommand}" />
                                            </i:EventTrigger>
                                        </i:Interaction.Triggers>
                                    </Button>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsSelected" Value="True">
                                        <Setter TargetName="button"  Property="Background" Value="{StaticResource NouvemSecondaryMainBrush}"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.Resources>
                <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource StyleScrollBarTouchscreenNarrow}"/>
            </ListView.Resources>
        </ListView>

你好,

我正在尝试将事件添加到列表视图控件模板中包含的按钮的命令触发器。我们有一个在客户端触摸屏上运行的应用程序,它对按钮按下过于敏感。我想处理一个按钮 PreviewMouseUp 事件来解决这个问题(目前,当他们按下按钮时,它也会按下按钮下方的内容,例如按下按钮两次)

但是,我的视图模型中没有命中命令处理程序代码。

任何帮助将不胜感激。

【问题讨论】:

    标签: wpf listview


    【解决方案1】:

    通过按钮将IsHitTestVisible 设置为“True”。

    【讨论】:

      【解决方案2】:
      <ListView 
                          x:Name="ListViewPoducts"
                          SelectionMode="Single"
                          ItemsSource="{Binding ProductGroups}"
                          SelectedItem="{Binding SelectedProductGroup}"
                          ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                          ScrollViewer.VerticalScrollBarVisibility="Auto"
                          Background="{StaticResource NouvemLightBackgroundBrush}">
                  <ListView.ItemsPanel>
                      <ItemsPanelTemplate>
                          <WrapPanel Orientation="Vertical" />
                      </ItemsPanelTemplate>
                  </ListView.ItemsPanel>
      
                  <ListView.ItemContainerStyle>
                      <Style TargetType="{x:Type ListViewItem}">
                          <Setter Property="Width" Value="Auto"/>
                          <Setter Property="Height" Value="Auto"/>
                          <Setter Property="Template">
                              <Setter.Value>
                                  <ControlTemplate TargetType="ListViewItem">
                                      <Border  Background="Transparent" >
      
                                          <i:Interaction.Triggers>
                                              <i:EventTrigger EventName="PreviewMouseUp">
                                                  <command:EventToCommand Command="{Binding DataContext.HandeProductionProductGroupSelectionCommand, ElementName=ListViewPoducts}"/>
                                              </i:EventTrigger>
                                          </i:Interaction.Triggers>
                                          <Button Name="button" Style="{StaticResource StyleButtonTouchscreenMenu}" IsHitTestVisible="False">
                                              <Grid>
                                                  <TextBlock Text="{Binding Name}" 
                                             FontSize="{Binding Source={x:Static global:ApplicationSettings.TouchscreenMenuButtonFontSize}}"
                                             HorizontalAlignment="Center" 
                                             VerticalAlignment="Center" 
                                             TextAlignment="Center" 
                                             TextWrapping="Wrap" />
                                              </Grid>
                                          </Button>
                                      </Border>
                                      <ControlTemplate.Triggers>
                                          <Trigger Property="IsSelected" Value="True">
                                              <Setter TargetName="button"  Property="Background" Value="{StaticResource NouvemSecondaryMainBrush}"/>
                                          </Trigger>
                                      </ControlTemplate.Triggers>
                                  </ControlTemplate>
                              </Setter.Value>
                          </Setter>
                      </Style>
                  </ListView.ItemContainerStyle>
                  <ListView.Resources>
                      <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource StyleScrollBarTouchscreenNarrow}"/>
                  </ListView.Resources>
              </ListView>
      

      我想通了。只需要将我的事件绑定到命令到根元素数据上下文。

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-24
        • 2011-09-01
        • 1970-01-01
        • 2011-12-16
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多