C# WPF:绑定仅在使用Snoop时有效

C# WPF:绑定仅在使用Snoop时有效,c#,wpf,data-binding,snoop,C#,Wpf,Data Binding,Snoop,我们在WPF应用程序中使用自定义弹出窗口。WPF本机弹出窗口的问题在于: 它使用了一个新窗口n,因此内容最终会出现在另一个可视化树中,这使得变换计算更加复杂,并且您无法控制Zindex。它将永远是最重要的 内容将丢失DataContext和所有继承的属性或资源 我们的自定义弹出窗口与本机WPF弹出窗口的区别在于,它将弹出窗口的内容放在同一窗口的容器中,而不是放在新窗口中。内容是弹出窗口的逻辑子级。因此,它通过DataContext和DP继承解决了本机弹出问题 我们的弹出窗口工作方式与XAML

我们在WPF应用程序中使用自定义弹出窗口。WPF本机弹出窗口的问题在于:

  • 它使用了一个新窗口n,因此内容最终会出现在另一个可视化树中,这使得变换计算更加复杂,并且您无法控制Zindex。它将永远是最重要的
  • 内容将丢失DataContext和所有继承的属性或资源
我们的自定义弹出窗口与本机WPF弹出窗口的区别在于,它将弹出窗口的内容放在同一窗口的容器中,而不是放在新窗口中。内容是弹出窗口的逻辑子级。因此,它通过DataContext和DP继承解决了本机弹出问题

我们的弹出窗口工作方式与XAML中的本地窗口类似

<pop:UbiPopup IsOpen="{Binding ElementName=pop_button,Path=IsChecked,Mode=TwoWay}" PlacementTarget="{Binding ElementName=maingrid}" Placement="CenterHorizontal,Top" >
    <Border Background="Blue" BorderThickness="0"  Margin="5">
           <TextBlock Text="{Binding Label}"
    </Border>
 </pop:UbiPopup>


Snoop不会删除和重新应用绑定。它所做的是创建绑定到对象/控件的DependencyProperties的新绑定,这将导致再次计算绑定

您写道您正在将内容添加到逻辑树中,如果通过调用AddLogicalChild这样做,您还应该覆盖LogicalChildren属性以返回内容

希望这能解决你的问题