0

我有一个由 Calender + timepicker 组成的 WPF 用户控件。我打算在弹出窗口中使用此用户控件并将弹出窗口显示在文本框焦点上。我的问题是我能够正确显示弹出窗口,但是当用户在日历中选择日期时,弹出窗口会自动关闭。

在选择特定日期之前,用户基本上没有选项可以滚动浏览年/月/日。如何在文本框失去焦点之前保持弹出窗口打开。

我已经尝试过 StaysOpen + isOpen,但它们都不起作用。

谢谢

我在 texbox 的控制模板中发布了 XAML 的一部分

<Popup x:Name="DatePickerPopup" IsOpen="False"
                           Width="{Binding ActualWidth, RelativeSource={RelativeSource TemplatedParent}}"
                           Height="{TemplateBinding Height}">
                        <Grid>
                            <Calendar/>
                        </Grid>
                    </Popup>

在我的自定义控件中具有 bool Dependency 属性后

<Popup x:Name="DatePickerPopup" IsOpen="{Binding IsPopupOpen, RelativeSource={RelativeSource TemplatedParent}}"
                           Width="{Binding ActualWidth, RelativeSource={RelativeSource TemplatedParent}}"
                           Height="{TemplateBinding Height}">
                        <Grid>
                            <Calendar/>
                        </Grid>
                    </Popup>
4

2 回答 2

1

我在几个Popup控件中有类似的功能,并且IsOpen非常适合我......我不确定你在用它做什么。我将它绑定到一个bool属性,并在我希望它打开或关闭时更改此属性值:

<Popup Name="SuggestionsPopup" IsOpen="{Binding IsPopupOpen, RelativeSource={
    RelativeSource Mode=FindAncestor, AncestorType={x:Type Controls:
    AutoCompleteTextBox}}}" StaysOpen="False" MaxHeight="{Binding MaxPopupHeight, 
    RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Controls:
    AutoCompleteTextBox}}}" AllowsTransparency="True">
于 2013-09-10T12:47:00.910 回答
0

我已经解决了这个问题。我实际上下载了 WPF 工具包的源代码,可从http://wpftoolkit.codeplex.com/获得。

他们有一个具有相同场景的 datetimepicker 控件。

我添加了一个切换按钮,然后将 Popup 的 IsOpen 属性绑定到 Toggle 按钮的 IsChecked 属性。事情对我来说很好。这是演示代码。

<ToggleButton Margin="1" x:Name="_calenderButton"
                        IsChecked="{Binding IsOpen, RelativeSource={RelativeSource TemplatedParent}}"
                        IsEnabled="{Binding IsDateTimePickerReadOnlyCallback, 
                        RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource invertBoolConverter}}"
                        Grid.Column="1">
                        <Image Height="20" Width="20" Source="pack://application:,,,/Common;component/Images/calender2.jpg"/>
                    </ToggleButton>


<Popup x:Name="PART_Popup" IsOpen="{Binding IsChecked, ElementName=_calenderButton}" StaysOpen="False">
                        <Border BorderThickness="1" Padding="3" Background="{StaticResource PopupBackgroundBrush}" 
                                BorderBrush="{StaticResource PopupDarkBorderBrush}">
                            <StackPanel>
                                <Calendar x:Name="PART_Calender" BorderThickness="0"/>
                                <commonControls:TimePicker x:Name="PART_TimePicker"
                                                           />
                            </StackPanel>
                        </Border>
                    </Popup>

干杯

于 2013-09-11T10:24:39.110 回答