User controls are a composition of several controls that can be reused over and over. It is the equivalent to a TFrame
in Delphi.
User Control
type.XAML Example:
<UserControl x:Class="ezFITPrototypeWPF.usrctrlDoubleBarSlider" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="160" Width="Auto"> <Grid Background="Transparent"> <Grid.ColumnDefinitions></Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="25" /> <RowDefinition /> <RowDefinition Height="25" /> </Grid.RowDefinitions> <Button Grid.Row="0">^</Button> <StackPanel Grid.Row="1" Orientation="Horizontal"> <ProgressBar Name="pbWest" Width="10" Height="Auto" Orientation="Vertical" Foreground="Red" Value="80" IsIndeterminate="False" MouseDoubleClick="pbWest_MouseDoubleClick" MouseWheel="pbWest_MouseWheel" MouseLeftButtonDown="pbWest_MouseLeftButtonDown" MouseMove="pbWest_MouseMove" /> <ProgressBar Name="pbEast" Width="10" Height="Auto" Orientation="Vertical" Foreground="Blue" Value="80" IsIndeterminate="False" /> </StackPanel> <Button Grid.Row="2">v</Button> </Grid> </UserControl>
C# Example:
using System; using System.Collections.Generic; using System.Linq; using System.Text; 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 ezFITPrototypeWPF { /// <summary> /// Interaction logic for usrctrlDoubleBarSlider.xaml /// </summary> public partial class usrctrlDoubleBarSlider : UserControl { public usrctrlDoubleBarSlider() { InitializeComponent(); } private void pbWest_MouseDoubleClick(object sender, MouseButtonEventArgs e) { if (sender is ProgressBar) { // resize progressbar if (((ProgressBar)sender).Width == 10) { ((ProgressBar)sender).Width = 20; } else { ((ProgressBar)sender).Width = 10; } } } private void pbWest_MouseWheel(object sender, MouseWheelEventArgs e) { if (sender is ProgressBar) { //MessageBox.Show(string.Format("Mouse Delta = {0}", e.Delta)); //debug if (e.Delta > 0) { ((ProgressBar)sender).Value++; } else if (e.Delta < 0) { ((ProgressBar)sender).Value--; } } } private void pbWest_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (sender is ProgressBar) { Point point = e.GetPosition(((ProgressBar)sender)); //MessageBox.Show(string.Format("{0},{1}", point.X, point.Y)); //debug ((ProgressBar)sender).Value = 100 - ((point.Y / ((ProgressBar)sender).Height) * 100); // draw handle Rectangle rect = new Rectangle(); rect.Height = 10; rect.Width = 300; rect.Fill = Brushes.Red; rect.BringIntoView(); rect.PointFromScreen(point); } } private void pbWest_MouseMove(object sender, MouseEventArgs e) { if (sender is ProgressBar) { //Point point = e.GetPosition(((ProgressBar)sender)); ////MessageBox.Show(string.Format("{0},{1}", point.X, point.Y)); //debug //((ProgressBar)sender).Value = 100 - ((point.Y / ((ProgressBar)sender).Height) * 100); } } } }
xmlns:local="clr-namespace:WpfApplication1"
local
).