WPF mouse down和mouseleftbuttonup事件冲突.1停用另一个.(无边界应用程序)

本文关键字:另一个 边界 应用程序 down mouse mouseleftbuttonup 冲突 事件 WPF | 更新日期: 2023-09-27 18:24:13

我有一个WPF应用程序,它是无边界的,所以我需要为窗口函数创建自己的按钮,并需要添加MouseDown事件,以允许应用程序在单击和拖动时移动。文件大纲为:

Window网格帆布网格stackPanel-这是我的窗口关闭最大和最小按钮所在的位置。

这是StackPanel:的代码

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Canvas.Left="689" Canvas.Top="5">
            <TextBlock x:Name="Minimize" Text="0" FontFamily="Webdings" Foreground="Black" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0" MouseLeftButtonUp="Minimize_MouseLeftButtonUp"/>
            <TextBlock x:Name="Maximize" Text="1" FontFamily="Webdings" Foreground="Black" Margin="5,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Right" MouseLeftButtonUp="Maximize_MouseLeftButtonUp"/>
            <TextBlock x:Name="Close" Text="r" FontFamily="Webdings" Foreground="Black" Margin="5,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Right" MouseLeftButtonUp="Close_MouseLeftButtonUp"/>
        </StackPanel>

当我添加MouseDown dragmove方法时,它会取消StackPanel,并且不允许我关闭应用程序,如上面的代码所示。我认为文件大纲需要一个特定的顺序?需要一些帮助,也许可以理解它是如何对event handlers进行优先级排序的,以及我是否需要重新排列我的文档大纲。

WPF mouse down和mouseleftbuttonup事件冲突.1停用另一个.(无边界应用程序)

调用.DragMove会阻止MouseLeftButtonUpTextBlock上执行,但是按钮的.Click事件应该能正常工作。

如果我没有记错的话,Button的MouseDown事件不会出现在UI树中,因此父控件(在本例中为StackPanel)的MouseDown事件不会被执行。

由于您正在使用不同的UI寻找按钮的功能,我建议您只使用覆盖了Template<Button>

例如,

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <TextBlock Text="{TemplateBinding Button.Content}"
                           FontFamily="Webdings" Foreground="Black">
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

它可以这样使用:

<Button x:Name="Minimize" Text="0" 
        Style="{DynamicResource MyButtonStyle}" 
        Click="Minimize_Click" ... />