【问题标题】:WPF how to detect listviewitem has been selectedWPF如何检测listviewitem已被选中
【发布时间】:2014-08-18 11:15:32
【问题描述】:

我的 ListView 控件有 DataTemplate,它包含几个文本块和一个按钮。我希望该按钮仅在选择该项目时可见。 这是我的 DataTemplate 代码:

<ListView.ItemTemplate>
                            <DataTemplate>
                                <Grid Background="AliceBlue">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="300" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="90" />
                                    </Grid.ColumnDefinitions>

                                    <TextBlock HorizontalAlignment="Left" Margin="10,0,10,0" 
                                           VerticalAlignment="Center" FontFamily="Verdana" FontSize="16" 
                                           FontWeight="Black" Grid.Column="0" Text="{Binding name}"/>

                                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="1">
                                        <TextBlock FontFamily="Verdana" FontSize="10" Grid.Column="1"
                                           VerticalAlignment="Center" HorizontalAlignment="Center"
                                           Text="Number of Chapters: " />
                                        <TextBlock FontFamily="Verdana" FontSize="12" Grid.Column="1"
                                           VerticalAlignment="Center" HorizontalAlignment="Center"
                                           Text="{Binding chaptersCount}" />
                                    </StackPanel>

                                    <Button HorizontalAlignment="Center" Height="50" Width="80" Content="Read" 
                                        Grid.Column="2" Visibility="Hidden" Click="Button_Click_3" Name="ReadButton"/>

                                </Grid>
                            </DataTemplate>
                        </ListView.ItemTemplate>

我该怎么做?

【问题讨论】:

标签: c# wpf listview


【解决方案1】:

您可以在 DataTemplate 中使用 DataTrigger 来实现此目的,这将检查 Templated 父级的 IsSelected 属性:

<ListView.ItemTemplate>
    <DataTemplate>
        .....

            <Button HorizontalAlignment="Center" Height="50"
                    Width="80" Content="Read" 
                    Grid.Column="2" Visibility="Hidden" Name="ReadButton"/>

        </Grid>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding IsSelected,
                         RelativeSource={RelativeSource Mode=TemplatedParent}}"
                         Value="True">
                <Setter TargetName="ReadButton" Property="Visibility"
                        Value="Visible"/>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
</ListView.ItemTemplate>

【讨论】:

  • 哦。这可能比我在回答中的做法更干净。我应该考虑更多地使用这个
【解决方案2】:

您需要稍微更改您的 Button:一种快速的 XAML 方法是在其 Visibility 上添加一个 Trigger 以使其在未选中时隐藏(注意:此处编写的代码,希望没有错字):

<Button HorizontalAlignment="Center" Height="50" Width="80" Content="Read" 
                                        Grid.Column="2" Click="Button_Click_3" Name="ReadButton">
  <Button.Style>
    <Style TargetType="{x:Type Button}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}" Value="False">
          <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 2011-03-26
    • 2016-12-30
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多