簡體   English   中英

在列表視圖 UWP 中選擇項目時選中復選框

[英]check checkbox when item selected in listview UWP

我正在編寫一個帶有列表視圖的 UWP 應用程序。 listviewitems 包含一個文本塊和一個復選框。 選擇 listviewitem 后,我希望復選框選中/取消選中。 我還想刪除“selected”動畫,其中 listviewitem 在被選中時變為藍色。

我找到了不同的解決方案,但它們似乎都依賴於觸發器的使用,Visual Studio 告訴我在 UWP 中不可用。

如果沒有 UWP 中的觸發器,我該如何解決這個問題?

我的列表視圖:

<ListView Name="ListViewItems" Grid.Row="2">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Margin" Value="0,0,0,1"></Setter>
                <Setter Property="Background" Value="White"></Setter>
                <Setter Property="Padding" Value="5"></Setter>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Padding="5,0">
                    <CheckBox HorizontalAlignment="Right" VerticalAlignment="Center" Name="CheckBoxItem"></CheckBox>
                    <TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Name="TextblockItem" Text="{Binding}"></TextBlock>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

選擇 listviewitem 后,我希望復選框選中/取消選中。

您可以直接將 IsChecked 屬性綁定到 CheckBox 到 ListViewItem IsSelected 屬性:

<CheckBox 
      HorizontalAlignment="Right" 
      Margin="10"
      VerticalAlignment="Center" 
      IsChecked="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}"
      Name="CheckBoxItem">
</CheckBox>

每當 ListViewItem 的 IsSelected 屬性更改時,CheckBox 將被選中/取消選中。

我還想刪除“selected”動畫,其中 listviewitem 在被選中時變為藍色。

下面的代碼可以幫助您實現這一點,但是,它覆蓋了項目的模板,這意味着您必須編寫自己的模板。

            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="FocusVisualStyle" Value="{x:Null}" />                    
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

如果ListViewItemSource綁定到 ViewModel 上的集合,我建議您向集合的項目類添加一個 bool。

因此,例如,如果您要顯示 Persons,請將 bool IsSelected 字段添加到 Person 類。 然后,您可以使用此字段將其綁定到視圖中復選框的IsChecked道具,唯一需要做的就是確保設置 Mode=TwoWay

剩下要做的最后一件事是切換這個 IsSelected 字段,您可以通過將 ListView 的 SelectedItem 綁定到 ViewModel 上的 Person 屬性來完成此操作,並且每次調用它時(屬性的設置器),切換給定的 IsSelected 字段。

要在ListView某個項目被選中時覆蓋顏色的變化,您需要獲取 ListView 模板的副本並刪除選中狀態下的顏色設置

暫無
暫無

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

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