Как сделать так, чтобы кнопки ButtonSpinner не закрывали всплывающее окно, в котором оно находится? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть RepeatButton внутри шаблона ButtonSpinner внутри всплывающего окна.Когда я нажимаю на нее, я хочу, чтобы всплывающее окно оставалось открытым, но оно закрывается.Причина, по которой я использую этот шаблон, заключается именно в том, чтобы решить эту проблему.

Снимок экрана:

screenshot

Обработчик события OnMouseLeftButtonUpпомечает событие MouseLeftButtonUp как обработанное здесь .

Я думал об использовании e.Handled = true в обработчике событий, но я не уверен в этом, и порядок событий такой:

  1. PreviewMouseLeftButtonDown
  2. MouseLeftButtonDown
  3. PreviewMouseDown
  4. MouseDown
  5. Click
  6. PreviewMouseUp
  7. MouseUp
  8. PreviewMouseLeftButtonUp
  9. MouseLeftButtonUp

Внутри разметки Popup, у меня есть это:

<local:CustomIntegerUpDown Grid.Row="3" Value="1" Increment="1" ClipValueToMinMax="True" x:Name="MyCustomIntegerUpDown"/>

Ниже приведен шаблон, который я использую(только для целей тестирования: большая часть копируется из исходного кода Extended WPF Toolkit):

<xceed:ButtonSpinner.Template>
    <ControlTemplate TargetType="{x:Type xceed:ButtonSpinner}">
        <Border x:Name="Border"
                SnapsToDevicePixels="True"
                Background="{TemplateBinding Background}"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition x:Name="firstContentColumn"
                                Width="*" />
                    <ColumnDefinition x:Name="secondContentColumn"
                                Width="Auto" />
                </Grid.ColumnDefinitions>
                <ContentPresenter x:Name="contentPresenter"
                    Focusable="False"
                    Margin="{TemplateBinding Padding}"
                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                <Grid x:Name="gridContent"
                    Grid.Column="1"
                    Visibility="{TemplateBinding ShowButtonSpinner, Converter={StaticResource BooleanToVisibilityConverter}}"
                    Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">

                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>

                    <RepeatButton x:Name="PART_IncreaseButton"
                        Style="{DynamicResource {x:Static themes:ResourceKeys.SpinnerButtonStyleKey}}"
                        IsTabStop="{TemplateBinding IsTabStop}"
                        ContentTemplate="{StaticResource IncreaseGlyphNormalKey}" >
                    </RepeatButton>

                    <RepeatButton x:Name="PART_DecreaseButton"
                        Grid.Row="1"
                        Style="{DynamicResource {x:Static themes:ResourceKeys.SpinnerButtonStyleKey}}"
                        IsTabStop="{TemplateBinding IsTabStop}"
                        ContentTemplate="{StaticResource DecreaseGlyphNormalKey}" >
                    </RepeatButton>

                </Grid>
            </Grid>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Background"
                    Value="{DynamicResource {x:Static themes:ResourceKeys.ControlDisabledBackgroundKey}}" />
            </Trigger>
            <Trigger SourceName="PART_IncreaseButton"
                    Property="IsEnabled"
                    Value="False">
                <Setter TargetName="PART_IncreaseButton"
                    Property="ContentTemplate"
                    Value="{StaticResource IncreaseGlyphDisabledKey}" />
            </Trigger>
            <Trigger SourceName="PART_DecreaseButton"
                    Property="IsEnabled"
                    Value="False">
                <Setter TargetName="PART_DecreaseButton"
                    Property="ContentTemplate"
                    Value="{StaticResource DecreaseGlyphDisabledKey}" />
            </Trigger>
            <Trigger Property="ButtonSpinnerLocation"
                    Value="Left">
                <Setter TargetName="firstContentColumn"
                    Property="Width"
                    Value="Auto" />
                <Setter TargetName="secondContentColumn"
                    Property="Width"
                    Value="*" />
                <Setter TargetName="contentPresenter"
                    Property="Grid.Column"
                    Value="1" />
                <Setter TargetName="gridContent"
                    Property="Grid.Column"
                    Value="0" />
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</xceed:ButtonSpinner.Template>

Я не нашел в Google порядок событий мыши, и я не знаю,решить проблему можно следующим образом.

...