我有一个无边框的 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
以及我是否需要重新安排我的文档大纲。
答案 0 :(得分:1)
调用.DragMove
会阻止MouseLeftButtonUp
在TextBlock
上执行,但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" ... />