MVVM DataTrigger不起作用

时间:2016-08-29 14:43:28

标签: c# xaml mvvm

我有以下代码

<DockPanel.Style>
            <Style TargetType="DockPanel">
                <Setter Property="Visibility" Value="Hidden"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=flowTreeView, Path=SelectedItem.hasInput}" Value="1" >
                        <Setter Property="Visibility" Value="Visible"/>
                        <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=txtBoxPopUp}"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=flowTreeView, Path=SelectedItem.hasInput}" Value="0" >
                        <Setter Property="Visibility" Value="Hidden"/>
                    </DataTrigger>              
                </Style.Triggers>
            </Style>
        </DockPanel.Style>

在我的问题之前,这个应用程序有一个带有一些节点的TreeView。当我选择需要用户输入的节点时,它会显示以前的DockPanel。 DockPanel还在DockPanel.Style下面包含 StackPanel

如您所见,此 DockPanel 可见性=隐藏开头。然后,当触发器触发 SelectedItem.hasInput 具有值= 1 的位置时,它会将DockPanel的可见性设置为可见,并且&#39 ; s应该关注我的TextBox txtBoxPopUp 。问题是当我点击节点时,没有任何反应(不显示DockPanel)。但是如果我删除第二个Setter(它将焦点放在TextBox上),DockPanel会正常显示。其他奇怪的行为,使用2 Setters,如果我多次点击需要用户输入的Node,它会使DockPanel聚焦TextBox,但有时只会发生。

结论,我想在DockPanel可见时关注TextBox,但我无法做到。

1 个答案:

答案 0 :(得分:0)

<Style TargetType="DockPanel">
    <Setter Property="Visibility" Value="Hidden"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=flowTreeView, Path=SelectedItem.hasInput}" Value="1" >
            <Setter Property="Visibility" Value="Visible"/>
            <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=txtBoxPopUp}"/>          
    </Style.Triggers>
</Style>

您无需拥有第二个数据触发器(设置为Hidden)。由于这已经是默认值,因此无需使用它。