如何使用Control来查看虽然它不在VisualTree中

时间:2014-01-28 14:25:55

标签: wpf visual-tree

我很抱歉这个愚蠢的头衔,但我的要求非常类似。

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

我知道这个弹出窗口不在Visual Tree中。当按钮点击时,我需要弹出这个弹出窗口。

抱歉我的英语不好。希望问题很明确......

由于

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,则只要点击其他按钮,您就会显示或隐藏自定义控件中定义的弹出窗口。

要实现这一点,您可以向自定义控件添加依赖属性,并相应地在IsOpen设置Popup属性。

以下示例代码:

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依赖属性,您还可以通过Data Binding设置此属性。

希望这有助于或帮助您解决问题!

<强>更新

我的XAML

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

我的XAML.cs

void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    customDatePicker.IsPopupOpen = !customDatePicker.IsPopupOpen;
}
相关问题