簡體   English   中英

如何在UserControl內部的控件上添加事件

[英]How to add event on control inside of a UserControl

我有一個WPF用戶控件,包括一個按鈕和一個模板。 要向該按鈕添加Click事件,我該怎么做?

CloseButton.xaml:

<UserControl x:Class="Toolbox.UserContols.CloseButton"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Toolbox.UserContols"
             mc:Ignorable="d" 
             d:DesignHeight="10" d:DesignWidth="10">
    <UserControl.Resources>
        <SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/>
        <ImageBrush x:Key="Button.Static.Background" ImageSource="/Toolbox.Resources;component/Resources/CloseButton.png" Opacity="0.5"/>
        <ImageBrush x:Key="Button.MouseOver.Background" ImageSource="/Toolbox.Resources;component/Resources/CloseButton.png" Opacity="1"/>
        <Style x:Key="CloseButtonStyle" TargetType="{x:Type Button}">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true" Opacity="0.5">
                            <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter Property="Background" Value="{StaticResource Button.MouseOver.Background}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>
        <Button Style="{DynamicResource CloseButtonStyle}"/>
</UserControl>

使用CloseButton:

<UserContols:CloseButton x:Name="close" Margin="10" HorizontalAlignment="Right" VerticalAlignment="Top"/>

現在,我想像在普通按鈕上一樣添加一個Click事件,但是我的UserControl似乎沒有onClick選項。

示例代碼:

<UserContols:CloseButton x:Name="close" Click="close_onClick" Margin="10" HorizontalAlignment="Right" VerticalAlignment="Top"/>

這是最簡約的解決方案,也許可以擴展,但是現在對此太累了:)

在您的xaml中命名內部按鈕,以便能夠訪問它

<Button Name="innerButton" Style="{DynamicResource CloseButtonStyle}"/>

然后像這樣公開事件

public partial class CloseButton : UserControl
{
    public event EventHandler Click;

    public CloseButton()
    {
        InitializeComponent();

        innerButton.Click += ButtonClick;
    }

    private void ButtonClick(object sender, RoutedEventArgs e)
    {
        var eventHandler = this.Click;

        if (eventHandler != null)
        {
            eventHandler(this, e);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM