none
Определение событий для пользовательского элемента в WPF RRS feed

  • Вопрос

  • Здравствуйте, я разбираюсь с созданием пользовательских элементов управления, и возник вопрос связанный с определением событий.

    Есть UserControl следующего содержания:

    <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="Controls.SelectionBox">
    
    	<Grid x:Name="LayoutRoot">
    		<Grid>
    			<Grid.ColumnDefinitions>
    				<ColumnDefinition/>
    				<ColumnDefinition Width="25"/>
    			</Grid.ColumnDefinitions>
                <TextBox Text="{Binding Path=Text, RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}}}" />
                <Button Content="..." Grid.Column="1" />
    		</Grid>
    	</Grid>
    </UserControl>

    И соответственно код к нему:

    namespace Controls
        {
            public partial class SelectionBox : UserControl
            {
                public static DependencyProperty MyText = DependencyProperty.Register("Text", typeof(string), typeof(SelectionBox),
                        new FrameworkPropertyMetadata("Text", new PropertyChangedCallback(OnTextChange)));
                public static readonly RoutedEvent ButtonClickEvent = EventManager.RegisterRoutedEvent("ButtonClick", RoutingStrategy.Bubble,
                        typeof(RoutedEventHandler), typeof(SelectionBox));
                
                public SelectionBox()
                {
                    InitializeComponent();
                }
    
                private static void OnTextChange(DependencyObject sender, DependencyPropertyChangedEventArgs e)
                {
                    SelectionBox mySelBox = (SelectionBox)sender;
                    if (e.Property == MyText)
                        mySelBox.Text = (string)e.NewValue;
                }
    
                public string Text
                {
                    get { return (string)GetValue(MyText); }
                    set { SetValue(MyText, value); }
                }
    
                public event RoutedEventHandler ButtonClick
                {
                    add { AddHandler(ButtonClickEvent, value); }
                    remove { RemoveHandler(ButtonClickEvent, value); }
                }
            }
    Как видно из кода я регистрирую свое событие "ButtonClick" и описываю оболочку присоединения к нему, а как мне его привязать к событию нажатия на кнопку, расположенную на форме?





    22 июня 2013 г. 6:55

Ответы

  • Нашел решение.

    void RaiseButtonClickEvent()
                {
                    RoutedEventArgs newEventArgs = new RoutedEventArgs(SelectionBox.ButtonClickEvent);
                    RaiseEvent(newEventArgs);
                }
    
                private void Button_Click(object sender, RoutedEventArgs e)
                {
                    RaiseButtonClickEvent();
                }

    • Помечено в качестве ответа Denis-ProfIT 22 июня 2013 г. 8:52
    22 июня 2013 г. 8:52