c# - 当另一个选项卡禁用时,如何使用 XAML 触发器更改 TabControl 索引?
问题描述
我所拥有的是一个带有两个选项卡的 WPF 应用程序中的 TabControl。有一个名为 的集合Voices
,您可以在第 6 行看到它Path=GameMaster.Voices.Count
。我想要实现的是,当集合为空时,第二个选项卡禁用,我已经成功完成。然后,我希望将 TabControl 的 SelectedIndex 设置为 0。这不仅会禁用第二个选项卡,还会强制用户返回第一个选项卡。使用下面的代码,结果有点起作用,但是,当我将第一个项目添加到集合中时,选项卡索引似乎设置为 -1。
这是应用程序启动时 TabControl 的屏幕截图,此时集合中没有对象:
但是,在添加项目时,会发生以下情况:
这是我的 XAML 代码:
<TabControl Grid.Row="2" Margin="0,3,0,0">
<TabControl.Resources>
<Style TargetType="TabControl">
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=GameMaster.Voices.Count, Converter={StaticResource CountGreaterThanZeroConverter}}"
Value="False">
<Setter Property="SelectedIndex" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.Resources>
<TabItem Header="Add new voice">
<!-- TAB 1 CODE -->
</TabItem>
<TabItem Header="Edit Voices"
Name="EditTab"
IsEnabled="{Binding Path=GameMaster.Voices.Count, Converter={StaticResource CountGreaterThanZeroConverter}}">
<!-- TAB 2 CODE -->
</TabItem>
</TabControl>
这是我正在使用的转换器:
internal class CountGreaterThanZeroConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var count = System.Convert.ToInt32(value);
return count > 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我试图了解发生了什么,但是我还没有找到合适的解决方案,非常感谢任何帮助。谢谢你。
解决方案
然而,在这里回答,我不是 100% 知道为什么这解决了我的问题。所以,如果有人能让我知道到底发生了什么,那对我来说将是一笔巨大的财富!
我添加了以下代码行:
<TabControl Grid.Row="2" Margin="0,3,0,0">
<TabControl.Resources>
<Style TargetType="{x:Type TabControl}">
<Setter Property="SelectedIndex" Value="0"/> <!-- This line -->
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=GameMaster.Voices.Count, Mode=OneWay, Converter={StaticResource CountGreaterThanZeroConverter}}"
Value="False">
<Setter Property="SelectedIndex" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.Resources>
...
</TabControl>
推荐阅读
- django - Django:如何有效地将对象添加到多个对象的 ManyToManyFields 中?
- python - 有没有办法在单个 Plotly 表格单元格中使用多种文本颜色?
- apache-spark - 什么决定了 Spark 应用程序中的作业数量
- java - 传送到 Bukkit 时玩家不朽 5 秒?
- excel - 在 Excel 中计算加权移动平均线
- wordpress - Woo Stripe 没有这样的来源:'src_1HSDYbGnTdOaP0tZcjziW81K' 错误
- mysql-8.0 - MySQL 8 数据库崩溃恢复
- python - 如何通过 MacOS Terminal shell 下载 FreeCAD Python 模块?
- laravel - Laravel - ErrorException:未定义的数组键“工作”
- r - 如何将此堆叠变量的数据框转换为 R 中每列一个变量的数据框?(长到宽)