WPF鼠标按下和mouseleftbuttonup事件冲突。 1停用另一个。 (无边界应用)

时间:2015-11-24 16:26:27

标签: c# wpf xaml

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

窗口  格   帆布    格    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以及我是否需要重新安排我的文档大纲。

1 个答案:

答案 0 :(得分:1)

调用.DragMove会阻止MouseLeftButtonUpTextBlock上执行,但Button的.Click事件应该可以正常运行。

如果我没记错的话,Button的MouseDown事件不会冒泡UI树,因此父控件的MouseDown事件(在这种情况下,StackPanel)不会被执行

由于您正在使用其他用户界面查找按钮的功能,因此我建议您只使用覆盖<Button> Template的{​​{1}}。

例如,

<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" ... />