弹出窗口没有关闭DropdownButton

时间:2017-06-19 08:34:32

标签: c# wpf wpf-controls wpftoolkit

这个问题对我来说几天令人沮丧。

我有一个DropdownButton(扩展WPF工具包),我将内容设置为Checkbox(工作正常),自定义ToggleButton,我只更改了外观和Popup,由ToggleButton打开。

<Style TargetType="{x:Type local:DropDownArrow}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToggleButton}">
                <Grid Background="Transparent">
                    <Path x:Name="ArrowPath"
                          Margin="3"
                          Fill="Transparent"
                          Stroke="Gray"
                          StrokeThickness="1"
                          StrokeStartLineCap="Round"
                          StrokeEndLineCap="Round"
                          Stretch="Uniform"

                          VerticalAlignment="Center"
                          HorizontalAlignment="Center">
                        <Path.Data>
                            <PathGeometry>
                                <PathGeometry.Figures>
                                    <PathFigure StartPoint="0,0">
                                        <LineSegment Point="0,6"/>
                                        <LineSegment Point="5,3"/>
                                        <LineSegment Point="0,0"/>
                                    </PathFigure>
                                </PathGeometry.Figures>
                            </PathGeometry>
                        </Path.Data>
                    </Path>
                </Grid>

                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="ArrowPath"
                                Property="Fill" Value="Gray"/>
                    </Trigger>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter TargetName="ArrowPath"
                                Property="Fill" Value="Black"></Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

一切都是这样的:

<HierarchicalDataTemplate >
                <xctk:DropDownButton Content="{Binding Name, Mode=OneTime}">
                    <xctk:DropDownButton.DropDownContent>
                        <ItemsControl ItemsSource="{Binding Children}">
                            <ItemsControl.ItemTemplate>
                                <HierarchicalDataTemplate>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*"/>
                                            <ColumnDefinition Width="Auto"/>
                                        </Grid.ColumnDefinitions>

                                        <CheckBox Grid.Column="0"
                                                  x:Name="FilterCheckBox"
                                                  Margin="3"
                                                  VerticalAlignment="Center"
                                                  IsChecked="{Binding IsChecked}"
                                                  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.FilterCommand}"
                                                  Content="{Binding Name}"/>

                                        <local:DropDownArrow Grid.Column="1"
                                                             x:Name="TogglePopupButton"
                                                             HorizontalAlignment="Right"
                                                             Visibility="{Binding HasSubFilters}"
                                                             IsEnabled="{Binding IsChecked, ElementName=FilterCheckBox}">
                                        </local:DropDownArrow>

                                        <Popup x:Name="Popup"
                                               Placement="Right"
                                               IsOpen="{Binding IsChecked, ElementName=TogglePopupButton, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                               StaysOpen="False">
                                            <Popup.Style>
                                                <Style TargetType="{x:Type Popup}">
                                                    <Style.Triggers>
                                                        <DataTrigger Binding="{Binding ElementName=Popup, Path=IsFocused}" Value="False">
                                                            <Setter Property="IsOpen" Value="False"/>
                                                        </DataTrigger>
                                                    </Style.Triggers>
                                                </Style>
                                            </Popup.Style>

                                            <ListBox ItemsSource="{Binding Children}">
                                                <ListBox.ItemTemplate>
                                                    <HierarchicalDataTemplate>
                                                        <CheckBox Content="{Binding Name}"
                                                                  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.FilterCommand}"
                                                                  IsChecked="{Binding IsChecked}"
                                                                  VerticalAlignment="Center"
                                                                  Margin="3"/>
                                                    </HierarchicalDataTemplate>
                                                </ListBox.ItemTemplate>
                                            </ListBox>
                                        </Popup>
                                    </Grid>
                                </HierarchicalDataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </xctk:DropDownButton.DropDownContent>
                </xctk:DropDownButton>
            </HierarchicalDataTemplate>

它嵌套在HierarchicalDataTemplate中,因为我有几个(应该是过滤器)。

我希望当用户在其外部点击时关闭Popup,如果你打开另一个带有ToggleButton的弹出窗口,我认为它也会关闭它。

我还希望DropdownButton保持打开状态,如果你从Popup返回到仍然打开的Dropdown(如果这样做,Popup应该关闭)

这两个都没有发生,我认为我的问题与Popup没有关闭我希望它的方式取决于我所做的Binding。 我不明白为什么DropdownButton关闭,如果我在Popup中选择一些内容后切换回它。

非常感谢任何帮助。

我不确定这个问题是否是正确的方法,因为代码,但据我所知,它通常希望更好地理解它或重现问题。

0 个答案:

没有答案