我已经继承了SketchFlow应用程序的原型/样机。
其中一个屏幕包含一个用户控件。用户控件依次由左侧的选项卡控件和右侧的显示区域组成。标签控件包含:
还有一个按钮可以弹出两个对话框之一,具体取决于用户控件中哪个选项卡处于活动状态。 (我实际上并没有在原型中弹出模式对话框,仅使用NavigateToScreenAction
。)
我发现a forum post描述了如何使用条件来触发多个动作,但是我一直在努力提出正确的表达式语法。而且似乎没有或没有这些功能的文档。
这是我到目前为止的内容:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:pi="http://schemas.microsoft.com/prototyping/2010/interactivity"
xmlns:pc="http://schemas.microsoft.com/prototyping/2010/controls"
xmlns:local="clr-namespace:OnaClientSketchflowScreens" ... >
<local:MyWidget x:Name="myWidget" ... />
<Button x:Name="myButton" Content="Button" ...>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:Interaction.Behaviors>
<ei:ConditionBehavior>
<ei:ConditionalExpression>
<ei:ComparisonCondition ... ?!? ... />
</ei:ConditionalExpression>
</ei:ConditionBehavior>
</i:Interaction.Behaviors>
<pi:NavigateToScreenAction
TargetScreen="MyAppPrototypeScreens.Dialog1"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<!-- second event trigger omitted for brevity -->
</Button>
所以我只查询Visibility
上的TabItem
属性,对吗?
<ei:ComparisonCondition Operator="Equal"
LeftOperand="{Binding ElementName=myWidget, Path=tocTab.Visibility}"
RightOperand="???"/>
我认为绑定语法正确,但是我不确定。更重要的是,我不知道我应该将价值与之进行比较。我的猜测是我需要在用户控件中定义一个资源,但是我不确定如何将特定的枚举值指定为资源...甚至有可能吗?
完全有可能存在更好/更轻松的方法来解决此问题。如果是这样,我欢迎提出建议。似乎极有可能不再支持ConditionBehavior
等人。
我研究过的其他内容:
我可能有两个按钮,并将可见性绑定到选项卡页面上……但这似乎有点黑。
最初,我在寻找一种以编程方式执行与NavigateToScreenAction
等效的方法,但这似乎是死路一条……直到我开始键入此问题。事实证明,您可以以编程方式执行导航操作-参见this other SO answer。基本上,您可以在后面的代码中连接click事件处理程序,并在SketchFlow播放器上下文中访问导航视图模型。但是后面的代码中实际的(未生成的)代码不受欢迎……所以我仍然对仅XAML的解决方案感兴趣。