我很抱歉这个愚蠢的头衔,但我的要求非常类似。
我从DatePicker
扩展了CustomControl。我没有任何单独的控制结构。我需要在其结构中附加一个Popup。所以我正在做的是在我的自定义控件的构造函数中,初始化一个新的弹出窗口,其中放置目标作为我的自定义控件。
我知道这个弹出窗口不在Visual Tree中。当按钮点击时,我需要弹出这个弹出窗口。
抱歉我的英语不好。希望问题很明确......
由于
答案 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;
}