gpt4 book ai didi

c# - 如何取消选择其他 AppBarToggleButton UWP

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:56 24 4
gpt4 key购买 nike

我正在做一个 UWP 项目,我正在使用 CommandBar。在我的命令栏中,我有多个 AppBarToggleButton,当我点击其中一个时,我不想取消选择另一个 AppBarToggleButton。有没有办法做到这一点?

这是一个简单的代码:

<CommandBar>
<AppBarToggleButton Icon="Shuffle" Label="Shuffle" Click="AppBarButton_Click" />
<AppBarToggleButton Icon="RepeatAll" Label="Repeat" Click="AppBarButton_Click"/>


<CommandBar.Content>
<TextBlock Text="Now playing..." Margin="12,14"/>
</CommandBar.Content>

最佳答案

您只需x:Name 您的按钮并在单击另一个按钮时手动将IsChecked 设置为False

private void AppBarButton1_Click(object sender, RoutedEventArgs e)
{
AppBarButton2.IsChecked = false;
}

更新

纯 XAML 解决方案将使用绑定(bind)。请注意,您在这里需要一个 InvertedBooleanConverter

IsChecked="{x:Bind Toggle1.IsChecked, Converter={StaticResource InvertedBooleanConverter}, Mode=TwoWay}"

奖金

我真的不喜欢绑定(bind)方法,所以这是一个使用行为构建的纯 XAML 解决方案。请注意,您需要先从 Nuget 包管理器安装 XAML 行为 -

Install-Package Microsoft.Xaml.Behaviors.Uwp.Managed -Version 2.0.0

下面的AutoDeselectToggleButtonBehavior 行为基本上在 CommandBar 加载后获取所有 AppBarToggleButton,订阅它们所有的 Click 事件和处理程序中,只需取消选择除已单击的切换之外的所有其他切换。

public class AutoDeselectToggleButtonBehavior : Behavior<CommandBar>
{
private IEnumerable<AppBarToggleButton> _toggleButtons;

protected override void OnAttached()
{
AssociatedObject.Loaded += OnLoaded;

base.OnAttached();
}

protected override void OnDetaching()
{
foreach (var toggle in _toggleButtons)
{
toggle.Click -= OnToggleClick;
}

AssociatedObject.Loaded -= OnLoaded;

base.OnDetaching();
}

private void OnLoaded(object sender, RoutedEventArgs e)
{
// Children extension method:
// https://github.com/JustinXinLiu/Continuity/blob/master/Continuity/Extensions/UtilExtensions.cs#L25
_toggleButtons = AssociatedObject.Children().OfType<AppBarToggleButton>();

foreach (var toggle in _toggleButtons)
{
toggle.Click += OnToggleClick;
}
}

private void OnToggleClick(object sender, RoutedEventArgs e)
{
var clickedToggle = (AppBarToggleButton)sender;

foreach (var toggle in _toggleButtons)
{
if (toggle != clickedToggle)
{
toggle.IsChecked = false;
}
}
}
}

安装到位后,只需将它附加到您的 CommandBar,如下所示 -

<CommandBar>
<Interactivity:Interaction.Behaviors>
<local:AutoDeselectToggleButtonBehavior />
</Interactivity:Interaction.Behaviors>

清洁且可重复使用。 :)

关于c# - 如何取消选择其他 AppBarToggleButton UWP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44695559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com