【发布时间】:2014-06-03 09:41:51
【问题描述】:
这感觉像是一个非常基本的问题,但我相信有更好的方法来做到这一点。我的 UI 中有一个Button,它选择一个特定的选项卡并从ViewModel 触发一个Command
这是当前代码(可以正常工作):
XAML:
<Button Content="Button!" Click="OnButtonClick" Command="{Binding WhateverCommand}" />
后面的代码:
private void OnButtonClick(object sender, RoutedEventArgs e)
{
theTab.IsSelected = true;
}
难道没有更简洁、仅限 XAML 的方式来执行该 UI 操作吗?我正在考虑类似的事情:
<Button Content="Button!" Click="OnButtonClick" Command="{Binding WhateverCommand}">
<Button.Triggers>
<EventTrigger RoutedEvent="Click">
<Setter TargetName="theTab" Property="IsSelected" Value="True" />
</EventTrigger>
</Button.Trigger>
</Button>
但不幸的是,EventTrigger 似乎不支持Click 事件。为什么这样?在 WPF 工作了几年后,我有时仍然对触发器感到困惑,这几乎可以概括。尝试构建时,Setter 行出现错误:
A value of type 'Setter' cannot be added to a collection or dictionary of type 'TriggerActionCollection'.
谢谢!
编辑因为我被问到我的窗口的 XAML 结构,它看起来像这样:
<DockPanel LastChildFill="True">
<Ribbon DockPanel.Dock="Top">
<Button Content="Button!" Click="OnButtonClick" Command="{Binding WhateverCommand}" />
</Ribbon>
<TabControl>
<TabItem x:Name="theTab" />
</TabControl>
</DockPanel>
【问题讨论】:
-
您可以发布您的完整 xaml,包括您正在谈论的选项卡吗?
-
这与问题本身无关。你需要吗?
-
是的。我想查看按钮在哪里以及选项卡在哪里的层次结构?
-
@Damascus 我同意,它看起来非常复杂,但这就是它可以做到的方式:) 你可以创建一个故事板资源,并在触发器中使用它,它看起来会更简单一些。