你有沒有發現一個問題,當你的自定義WPF usercontrol分配一個點擊事件處理程序與嵌套按鈕控制?我做。爲包含按鈕的WPF用戶控件創建自定義點擊事件處理程序?
當你把這樣的用戶控件放在一個主窗口中,讓我們說Main.xaml,MouseLeftButtonDown不起作用,但是PreviewMouseLeftButtonDown就像一個魅力。
但想象一下,告訴團隊中的每個開發人員使用您的usercontrol時使用此事件...您庫中的某些usercontrols有MouseLeftButtonDown,其他人PreviewMouseLeftButtonDown ....這是一個混亂你不同意嗎?
所以我有一個解決方案,但我希望有人看看是否有一些優雅的方式來創建您的自定義事件處理程序稱爲「點擊」。
在我的用戶名爲CustomButton.xaml.cs,我到目前爲止有:
public partial class CustomButton: UserControl
{
public CustomButton()
: base()
{
this.InitializeComponent();
}
public delegate void ClickHandler(object sender, EventArgs e);
public event EventHandler Click;
public void Button_Click(object sender, RoutedEventArgs e) {//execute daddy's button click
(((sender as Button).Parent as Grid).Parent as CustomButton).Click(sender, e);
e.Handled = false;
}
在我CustomButton.xaml
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="YourCompany.UI.Controls.CustomButton" d:DesignHeight="72.5" d:DesignWidth="200">
<UserControl.Resources>
blablabla
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Button Style="{DynamicResource CustomButton}"
Width="{Binding ElementName=CustomButton, Path=ActualWidth}"
Cursor="Hand" Foreground="#ffffff" FontSize="28" Margin="8,8,0,12"
HorizontalAlignment="Left"
Content="Custom Button" Click="Button_Click" />
</Grid>
現在我Main.xaml中,來電者,我有:
<Window x:Class="YourCompany.MyProject.Main"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MyProject!" Height="600" Width="800"
MinWidth="800" MinHeight="600" WindowState="Maximized" WindowStartupLocation="CenterScreen"
xmlns:bigbola="clr-namespace:YourCompany.UI.Controls;assembly=YourCompany.UI.Controls">
<mycontrols:CustomButton Name="test" MyImage=".\Images\btnOptions.png" Cursor="Hand"
Texto="See options" Click="test_Click"
Margin="168.367,176.702,253.609,0" ToolTip="See all options" Height="76.682"
VerticalAlignment="Top"></mycontrols:CustomButton>
說明:
在usercontrol中,當你點擊嵌套按鈕時,它執行它的父定製「Click」處理程序。
有沒有一種優雅的方式來實現相同的效果?
是的,我正在閱讀您的評論,並考慮創建一個以Button爲基礎控件的自定義控件。 有很多顯示UserControl的示例,所以我開始使用Microsoft Expression Blend構建自定義按鈕。 我看到我無法控制點擊事件。但後來我將學習如何創建一個簡單而優雅的自定義按鈕。 – 2009-05-20 19:45:17