[英]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.