Самодельный UIElement WPF c событием

385
27 мая 2017, 15:17

Здравствуйте. Хочу создать UIElement, содержащий, например, 2 стандартных эллипса:

public class MyUI : UIElement
{
    Ellipse el;
    Ellipse el1;
    public MyUI(Canvas canv)
    {
        Random rnd = new Random();
        el = new Ellipse();
        el1 = new Ellipse();
        el.Width = 30;  el1.Width = 30;
        el.Height = 30; el1.Height = 30;
        el.Fill = Brushes.Green;  el1.Fill = Brushes.Red;
        canv.Children.Add(el); canv.Children.Add(el1);
        Canvas.SetTop(el, rnd.Next(300)); Canvas.SetTop(el1, rnd.Next(300));
        Canvas.SetLeft(el, rnd.Next(300)); Canvas.SetLeft(el1, rnd.Next(300));
    }
  }

Подскажите, как создать событие нажатия кнопки мыши по моему элементу (назовём его MyUI_MouseLeftButtonDown), которое будет срабатывать при нажатии на один из эллипсов? подозреваю, что можно как-то использовать стандартные события Ellipse_MouseLeftButtonDown для каждого из эллипсов.

Answer 1

Давайте определим свои события, которые будут генерироваться в обработчиках стандартных событий MouseLeftButtonDown:

public partial class TwoEllipses : UserControl
{
    //наше новое событие
    public event EventHandler LeftEllipseClicked;
    protected void OnLeftEllipseClicked()
    {
        if (LeftEllipseClicked != null)
        {
            LeftEllipseClicked(this, EventArgs.Empty);
        }
    }
    public TwoEllipses()
    {
        InitializeComponent();
    }
    //обработчик стандартного события MouseLeftButtonDown
    private void Ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        //генерируем наше новое событие
        OnLeftEllipseClicked();            
    }
}

UserControl:

<UserControl x:Class="WpfApplication.TwoEllipses"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Canvas>
            <Ellipse Width="115" Height="160"  Fill="Blue"
                 MouseLeftButtonDown="Ellipse_MouseLeftButtonDown">
            </Ellipse>
            <Ellipse Width="115" Height="160"  Fill="Blue" Canvas.Left="160"
                 MouseLeftButtonDown="Ellipse_MouseLeftButtonDown">
            </Ellipse>
        </Canvas>
    </Grid>
</UserControl>

Используем:

<Window x:Class="WpfApplication.MainWindow"       
    xmlns:local="clr-namespace:WpfApplication"  >
<Window.Resources>
</Window.Resources>
<Grid>
    <local:TwoEllipses LeftEllipseClicked="TwoEllipses_LeftEllipseClicked"/>
</Grid>

READ ALSO
Tls сервер/клиент

Tls сервер/клиент

Никак не получается соединить даже 2 примера с msdn: https://msdnmicrosoft

318
Можно ли wmi список собрать в едино?

Можно ли wmi список собрать в едино?

Пытаюсь собрать всё максимально компактно

229
ASP .NET, Visual Studio Online [требует правки]

ASP .NET, Visual Studio Online [требует правки]

How to create custom task and add it to Build Process so that after build this task sends my artefacts to my e-mail?

210
Изменить высоту ячейки таблицы

Изменить высоту ячейки таблицы

Как сделать, чтобы высота ячейки автоматически увеличивалась в зависимости от размера контента внутри неё?

235