//xaml
<UserControl x:Class="WpfApp246.EllipseTbk"
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:WpfApp246"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Ellipse Fill="{Binding ElpColor,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="{Binding TbStr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center" HorizontalAlignment="Center"
FontSize="30"/>
</Grid>
</UserControl>
//xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp246
{
/// <summary>
/// Interaction logic for EllipseTbk.xaml
/// </summary>
public partial class EllipseTbk : UserControl
{
public EllipseTbk()
{
InitializeComponent();
this.DataContext = this;
}
public Brush ElpColor
{
get { return (Brush)GetValue(ElpColorProperty); }
set { SetValue(ElpColorProperty, value); }
}
// Using a DependencyProperty as the backing store for ElpColor. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ElpColorProperty =
DependencyProperty.Register("ElpColor", typeof(Brush),
typeof(EllipseTbk), new PropertyMetadata(Brushes.Red));
public int TbStr
{
get { return (int)GetValue(TbStrProperty); }
set { SetValue(TbStrProperty, value); }
}
// Using a DependencyProperty as the backing store for TbStr. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TbStrProperty =
DependencyProperty.Register("TbStr", typeof(int),
typeof(EllipseTbk), new PropertyMetadata(0));
}
}
![]()
//whole
//xaml
<UserControl x:Class="WpfApp246.EllipseTbk"
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:WpfApp246"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Ellipse Fill="{Binding ElpColor,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="{Binding TbStr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center" HorizontalAlignment="Center"
FontSize="30"/>
</Grid>
</UserControl>
//xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp246
{
/// <summary>
/// Interaction logic for EllipseTbk.xaml
/// </summary>
public partial class EllipseTbk : UserControl
{
public EllipseTbk()
{
InitializeComponent();
this.DataContext = this;
}
public Brush ElpColor
{
get { return (Brush)GetValue(ElpColorProperty); }
set { SetValue(ElpColorProperty, value); }
}
// Using a DependencyProperty as the backing store for ElpColor. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ElpColorProperty =
DependencyProperty.Register("ElpColor", typeof(Brush),
typeof(EllipseTbk), new PropertyMetadata(Brushes.Red));
public int TbStr
{
get { return (int)GetValue(TbStrProperty); }
set { SetValue(TbStrProperty, value); }
}
// Using a DependencyProperty as the backing store for TbStr. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TbStrProperty =
DependencyProperty.Register("TbStr", typeof(int),
typeof(EllipseTbk), new PropertyMetadata(0));
}
}
//cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp246
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private Random rnd { get; set; }
private double width { get; set; }
private double height { get; set; }
public MainWindow()
{
InitializeComponent();
this.WindowState = WindowState.Maximized;
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
rnd = new Random();
width = this.ActualWidth;
height = this.ActualHeight;
DrawEllipseTextBlock();
}
private void DrawEllipseTextBlock()
{
Canvas cvs = new Canvas();
for (int i = 0; i < 10; i++)
{
EllipseTbk elp = new EllipseTbk();
elp.Width = 100;
elp.Height = 100;
switch (i%3)
{
case 0:
elp.ElpColor = Brushes.Red;
break;
case 1:
elp.ElpColor = Brushes.Green;
break;
case 2:
elp.ElpColor = Brushes.Blue;
break;
}
elp.TbStr = i + 1;
Canvas.SetLeft(elp, rnd.Next(0, (int)width)-100);
Canvas.SetTop(elp, rnd.Next(0, (int)height)-100);
if (!cvs.Children.Contains(elp))
{
cvs.Children.Add(elp);
}
this.Content = cvs;
}
}
}
}