Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在控件不在VisualTree中时查看它_Wpf_Visual Tree - Fatal编程技术网

Wpf 如何在控件不在VisualTree中时查看它

Wpf 如何在控件不在VisualTree中时查看它,wpf,visual-tree,Wpf,Visual Tree,我为这个愚蠢的标题感到抱歉,但我的要求与此非常相似 我有一个从DatePicker扩展的CustomControl。我没有任何单独的控制结构。我需要在其结构上附加一个弹出窗口。因此,我所做的是在自定义控件的构造函数中,初始化一个新的弹出窗口,将放置目标作为自定义控件 在这里,我知道这个弹出窗口将不在可视化树中。当按钮点击时,我需要打开这个弹出窗口 对不起,我的英语不好。希望问题很清楚 谢谢如果我正确理解了您的问题,您希望在单击其他按钮时显示或隐藏自定义控件中定义的弹出窗口 为了实现这一点,您可以

我为这个愚蠢的标题感到抱歉,但我的要求与此非常相似

我有一个从
DatePicker
扩展的CustomControl。我没有任何单独的控制结构。我需要在其结构上附加一个弹出窗口。因此,我所做的是在自定义控件的构造函数中,初始化一个新的弹出窗口,将放置目标作为自定义控件

在这里,我知道这个弹出窗口将不在可视化树中。当按钮点击时,我需要打开这个弹出窗口

对不起,我的英语不好。希望问题很清楚


谢谢

如果我正确理解了您的问题,您希望在单击其他按钮时显示或隐藏自定义控件中定义的弹出窗口

为了实现这一点,您可以向自定义控件添加依赖项属性,并相应地在
弹出窗口上设置
IsOpen
属性

示例代码如下:

public static readonly DependencyProperty IsPopupOpenProperty =
    DependencyProperty.Register("IsPopupOpen", typeof (bool), typeof (CustomDatePicker), new PropertyMetadata(default(bool), PropertyChangedCallback));

public bool IsPopupOpen
{
    get { return (bool) GetValue(IsPopupOpenProperty); }
    set { SetValue(IsPopupOpenProperty, value); }
}

static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
    var datePicker = (CustomDatePicker) dependencyObject;
    datePicker.ShowOrHidePopup();
}

void ShowOrHidePopup()
{
    _popup.IsOpen = IsPopupOpen;
}
然后,您可以通过在自定义控件上设置
IsPopupOpen
属性来显示/隐藏弹出窗口。由于,
IsPopupOpen
是一个依赖属性,因此您也可以通过
数据绑定设置此属性

希望这有助于或给你一些想法来解决你的问题

更新

我的XAML

<StackPanel Orientation="Vertical">
        <Button Click="ButtonBase_OnClick" Content="Click Me!!" Margin="10" />
        <local:CustomDatePicker x:Name="customDatePicker" />
</StackPanel>

可能您的理解是正确的,但除非弹出窗口不在VisualTree中,否则没有任何用处。。虽然我在一个示例应用程序中尝试过改变它的“IsOpen”,但它不会出现,而且它似乎会弹出窗口。在答案中添加了示例代码。
void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    customDatePicker.IsPopupOpen = !customDatePicker.IsPopupOpen;
}