我有一个像这样定义的Popup:
<Popup
Name="myPopup"
StaysOpen="True"
Placement="Bottom"
PlacementRectangle="0,20,0,20"
PlacementTarget="{Binding ElementName=myPopupAnchor}">
<TextBlock ... />
</Popup>
Run Code Online (Sandbox Code Playgroud)
我已经myPopupAnchor为事件MouseEnter和元素添加了事件处理程序MouseLeave.两个事件处理程序切换弹出窗口的可见性.
我的问题是myPopupAnchor的位置只在首次显示弹出窗口时被读取,或者被隐藏然后再次显示.如果锚移动,则弹出窗口不会移动.
我正在寻找解决这个问题的方法,我想要一个动人的Popup.我可以通知WPF PlacementTarget绑定已更改并应再次读取吗?我可以手动设置弹出窗口的位置吗?
目前,我有一个非常粗略的解决方法,涉及关闭然后再次打开弹出窗口,这会导致一些重新绘制问题.
在我的自定义WPF控件中,我想获得一个包含Window或Page.当控件在窗口化的应用程序中时,Window.GetWindow()方法工作正常但是当它在浏览器中的XBAP应用程序中时,它返回浏览器窗口而不是页面.
有没有其他方法可以做到这一点?
我可以访问用户控件A.我想获得有关用户控件C的信息.有没有办法在WPF中执行此操作?结构基本上就是你所看到的.用户控件D是功能区,C是功能区上的选项卡,B和A是C的内容.我似乎无法访问C.我尝试使用A的Parent属性但它似乎没有给出我关于C.的信息

我有一个用户控件,其中控件的XAML可以绑定到父正常的数据上下文中的相应属性(数据上下文在xaml中传播).
例如,我有一个窗口,其DataContext我将设置为ObjectA.然后我在窗口中的用户控件尝试访问dataContext中的属性
所以我的窗口的xaml和后面的代码都可以看到非null的DataContext.
我对DataContext传播的控件可以在Xaml中看到非null的DataContext,但在后面的代码中却看不到.
处理这个问题的正确方法是什么?
我UserControl在另一个中有一个“子项” UserControl(它充当 a 中的 TabItem TabControl)。在子项UserControl和 TabItem 祖先之间是许多其他控件(例如:Grids、 a StackPanel,可能是 aScrollViewer等)。
UserControl我想访问我的孩子中TabItem 的属性UserControl,并自定义一个通常 建议的递归函数,该函数沿着可视化树向上移动。但是,这总是在第一次空检查时返回true,直到我在逻辑树上添加查询。
代码:
public MyTabItem FindParentTabItem(DependencyObject child)
{
DependencyObject parent = VisualTreeHelper.GetParent(child) ?? LogicalTreeHelper.GetParent(child);
// are we at the top of the tree
if (parent == null)
{
return null;
}
MyTabItem parentTabItem = parent as MyTabItem;
if (parentTabItem != null)
{
return parentTabItem;
}
else
{
//use recursion until …Run Code Online (Sandbox Code Playgroud)