有条件地将按钮绑定到不同的导航操作

时间:2018-08-23 15:03:59

标签: xaml sketchflow

我已经继承了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的解决方案感兴趣。

0 个答案:

没有答案