Có các giải pháp cho vấn đề này đối với các giao diện người dùng dựa trên XAML cũ hơn (WPF/SL) nhưng chúng không dễ dàng thích nghi với nền tảng Windows phổ biến.Tạo một ListBox với các mục mở rộng khi được chọn (Accordion)
Tôi đang cố gắng tạo danh sách các mục chỉ hiển thị chi tiết bị giới hạn ở trạng thái mặc định và mở rộng, khi được chọn, để chỉnh sửa nhanh một số dữ liệu.
Tôi đã không tìm thấy cách để tạo ra một hành vi mở rộng, mặc dù nó tương tự như ứng dụng Windows 10 Mail, với các cuộc trò chuyện. Khi một tin nhắn của một cuộc hội thoại được chọn, các tin nhắn khác của loại cuộc trò chuyện đó sẽ bị rơi xuống hoặc trượt xuống.
Dưới đây là ví dụ về danh sách nơi tôi chỉ muốn hiển thị tên lúc đầu.
<ListBox ItemsSource="{x:Bind Persons}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate x:DataType="src:Person">
<StackPanel HorizontalAlignment="Stretch" Width="Auto">
<TextBlock Text="{x:Bind Path=Name, Mode=OneWay}" Margin="12, 15, 12, 0" FontSize="18.667" />
<TextBox HorizontalAlignment="Stretch" Margin="12, 12, 12, 0" FontSize="18.667" Text="{x:Bind Path=Name, Mode=TwoWay}" />
<TextBlock Text="Date of birth" Margin="12, 15, 12, 0" />
<DatePicker Margin="12, 5, 12, 0" Date="{x:Bind Path=DateOfBirth, Mode=TwoWay}" />
<TextBlock Text="Domicile" Margin="12, 15, 12, 0" />
<TextBox Margin="12, 5, 12, 0" Text="{x:Bind Path=Domicile, Mode=OneWay}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Trong WPF, hành vi này có thể đạt được với trình kích hoạt Style.Triggers
nhưng chúng không còn khả dụng nữa.
Original Source Code trên GitHub
Bạn vẫn có các trình kích hoạt có sẵn cho bạn trong UWP và có một số cách bạn có thể thực hiện điều này trong XAML thuần túy, một cách nhanh chóng và đơn giản mà tôi có thể nghĩ đến khi thực hiện việc này. Tạo một ItemTemplate với một ToggleButton được tạo kiểu và một Panel bên dưới nó được cắt bớt. Sau đó, liên kết Hiển thị của bảng điều khiển với trạng thái IsChecked của ToggleButton và thêm một công cụ chuyển đổi Bool thành Visibility, thì đấy, xong. –