我有以下代码
<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,但我无法做到。
答案 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
)。由于这已经是默认值,因此无需使用它。