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;
}