【问题标题】:UWP SplitView DisplayMode Overlay - not in focusUWP SplitView DisplayMode 覆盖 - 不在焦点上
【发布时间】:2017-01-22 01:34:46
【问题描述】:

我有一个SplitView

<SplitView Name="splitView" 
   DisplayMode="{Binding SplitViewDisplayMode}" 
   IsPaneOpen="{Binding SplitViewIsPaneOpen}" 
   OpenPaneLength="200" CompactPaneLength="51"/>

我也在使用VisualStateManager根据应用程序窗口大小调整SplitView:(示例)

<VisualState.StateTriggers>
   <AdaptiveTrigger MinWindowWidth="500"></AdaptiveTrigger>
</VisualState.StateTriggers>

到目前为止,一切正常,但是当上面的触发器和下面的状态被激活时,我遇到了意外的结果。

<VisualState.Setters>
   <Setter Value="True" Target="splitView.IsPaneOpen"></Setter>
   <Setter Value="Overlay" Target="splitView.DisplayMode"></Setter>
</VisualState.Setters>

我似乎无法找到检测事件的方法,以便我的ViewModel 知道SplitView 窗格焦点何时丢失。现在按设计的覆盖显示,直到用户单击视图(按设计),但我想知道,SplitView 覆盖何时折叠,以便我可以将其他绑定事件添加到我的HamburgerMenu

根据我的经验,VisualStateManager 似乎没有更新/更改我的绑定

DisplayMode="{Binding SplitViewDisplayMode}"

关于我如何发现叠加层是否/何时消失/关闭的任何想法?

我唯一能想到的是创建发现窗口大小的方法,然后确定 SplitView 是否应该是Inline/Compact/Overlay.. 这是可行的,但会导致很多潜在组合。

当用户单击SplitView 之外的控件时,关于如何检测或让SplitView 告诉我Overlay 是否为Collapsed 的任何想法或想法?

【问题讨论】:

    标签: xaml data-binding uwp uwp-xaml splitview


    【解决方案1】:

    要使绑定起作用,您必须将它们指定为双向绑定。如果没有这个,他们只会用你对代码的更改来更新 UI,而不是相反:

    <SplitView Name="splitView" 
           DisplayMode="{Binding SplitViewDisplayMode, Mode=TwoWay}" 
           IsPaneOpen="{Binding SplitViewIsPaneOpen, Mode=TwoWay}" 
           OpenPaneLength="200" CompactPaneLength="51"/>
    

    现在,您的属性应该会在状态发生变化时正确更新。

    【讨论】:

    • 不知道为什么我错过了那个...谢谢!我还注意到 DisplayMode="{Binding SplitViewDisplayMode, Mode=TwoWay}" 仅作为对象而不是字符串工作:私有对象 _SplitViewDisplayMode;公共对象 SplitViewDisplayMode { get => _SplitViewDisplayMode;设置 => 设置属性(参考 _SplitViewDisplayMode,值); } 再次感谢
    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2012-08-03
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多