gpt4 book ai didi

c# - 在 WPF 中添加 X 关闭按钮

转载 作者:太空狗 更新时间:2023-10-30 00:53:13 28 4
gpt4 key购买 nike

我是 WPF 的新手,我需要制作一个按钮 (X) 来模拟表单中的 X 按钮。首先,我设置了 WindowStyle="None"。然后制作一个矩形:

<Rectangle Height="16" HorizontalAlignment="Left" Margin="482,4,0,0" Name="x_btn" Stroke="#00000000" VerticalAlignment="Top" Width="17" MouseEnter="x_btn_MouseEnter" MouseLeftButtonUp="x_btn_MouseLeftButtonUp">
<Rectangle.Fill>
<ImageBrush ImageSource="/Red%20Crescent;component/Images/x_btn.png" />
</Rectangle.Fill>
</Rectangle>

在此之后我想更改代码后面的 Background Image OnMousEnter 事件:

private void x_btn_MouseEnter(object sender, MouseEventArgs e)
{
}

private void x_btn_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
this.Close();
}

请尽快提供帮助。

注意:我尝试使用 Button,但它留下了边框,我不希望那样。

最佳答案

在您的情况下,最好为 Button 使用 Style,并使用 Path 而不是 Image。要正确实现关闭功能,最好通过一个DependencyProperty实现,直接在Style中设置值。

示例:

<Window x:Class="CloseButtonHelp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CloseButtonHelp"
Title="MainWindow" Height="350" Width="525">

<Window.Resources>
<!-- Our style for the ToggleButton -->
<Style x:Key="ToggleButtonWindowClose" TargetType="{x:Type ToggleButton}">
<!-- Here you can set the initial properties for the control -->
<Setter Property="Background" Value="Transparent" />
<Setter Property="SnapsToDevicePixels" Value="True" />

<!-- Template needs to completely re-writing the standard control -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Grid>
<!-- Then responsible for the content. In our case it did not really need, because it is set Path -->
<ContentPresenter x:Name="MyContentPresenter" Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" />
<!-- Our Path. Shows a cross -->
<Path x:Name="CloseWindow" SnapsToDevicePixels="True" ToolTip="Close window" Width="18" Height="17" Margin="0,0,10,0" HorizontalAlignment="Right" VerticalAlignment="Center" Stretch="Fill" Fill="#2D2D2D" Data="F1 M 26.9166,22.1667L 37.9999,33.25L 49.0832,22.1668L 53.8332,26.9168L 42.7499,38L 53.8332,49.0834L 49.0833,53.8334L 37.9999,42.75L 26.9166,53.8334L 22.1666,49.0833L 33.25,38L 22.1667,26.9167L 26.9166,22.1667 Z " />
</Grid>

<!-- Trigger fires on the property -->
<ControlTemplate.Triggers>
<!-- Here change the color when the mouse cursor -->
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="CloseWindow" Property="Fill" Value="#C10000" />
</Trigger>

<!-- Use ToggleButton, because it has a property IsChecked, accessible through the style -->
<Trigger Property="IsChecked" Value="True">
<Setter Property="local:WindowBehaviours.Close" Value="True" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>

<Grid>
<!-- Set the our style by key --->
<ToggleButton Name="CloseButton" Style="{StaticResource ToggleButtonWindowClose}" />
</Grid>
</Window>

WindowBehaviorsClass list :

public static class WindowBehaviours
{
// Closing window
public static void SetClose(DependencyObject target, bool value)
{
target.SetValue(CloseProperty, value);
}

public static readonly DependencyProperty CloseProperty =
DependencyProperty.RegisterAttached("Close",
typeof(bool),
typeof(WindowBehaviours),
new UIPropertyMetadata(false, OnClose));

private static void OnClose(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue is bool && ((bool)e.NewValue))
{
Window window = GetWindow(sender);

if (window != null)
{
window.Close();
}
}
}

private static Window GetWindow(DependencyObject sender)
{
Window window = null;

if (sender is Window)
{
window = (Window)sender;
}

if (window == null)
{
window = Window.GetWindow(sender);
}

return window;
}
}

有关详细信息,请参阅 MSDN

关于c# - 在 WPF 中添加 X 关闭按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17391134/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com