По туториалу написал компонент:
<UserControl x:Class="HlsDumpLib.GuiTestWPF.NumericUpDown"
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:HlsDumpLib.GuiTestWPF"
x:Name="root"
mc:Ignorable="d"
d:DesignWidth="80" d:DesignHeight="20">
<UserControl.Resources>
<local:IntStringConverter x:Key="conv" />
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="16" />
</Grid.ColumnDefinitions>
<TextBox Text="{Binding Value, ElementName=root, Converter={StaticResource conv}}"
HorizontalContentAlignment="Right" VerticalContentAlignment="Center"
Grid.Column="0" />
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Button Name="btnIncrease" Content="+" FontSize="8" Padding="0" Grid.Row="0"
Click="btnIncrease_Click" ToolTip="Увеличить" />
<Button Name="btnDecrease" Content="-" FontSize="8" Padding="0" Grid.Row="1"
Click="btnDecrease_Click" ToolTip="Уменьшить" />
</Grid>
</Grid>
</UserControl>
using System.Windows;
using System.Windows.Controls;
namespace HlsDumpLib.GuiTestWPF
{
public partial class NumericUpDown : UserControl
{
public int MaxValue
{
get { return (int)GetValue(MaxValueProperty); }
set { SetValue(MaxValueProperty, value); }
}
public static readonly DependencyProperty MaxValueProperty =
DependencyProperty.Register("MaxValue", typeof(int), typeof(NumericUpDown),
new PropertyMetadata(10));
public int MinValue
{
get { return (int)GetValue(MinValueProperty); }
set { SetValue(MinValueProperty, value); }
}
public static readonly DependencyProperty MinValueProperty =
DependencyProperty.Register("MinValue", typeof(int), typeof(NumericUpDown),
new PropertyMetadata(0));
public int Value
{
get { return (int)GetValue(ValueProperty); }
set { SetValue(ValueProperty, Clamp(value)); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown),
new PropertyMetadata(5));
public NumericUpDown()
{
InitializeComponent();
}
private void btnIncrease_Click(object sender, RoutedEventArgs e)
{
if (Value < MaxValue) { Value++; }
}
private void btnDecrease_Click(object sender, RoutedEventArgs e)
{
if (Value > MinValue) { Value--; }
}
private int Clamp(int n)
{
if (n < MinValue) { return MinValue; }
if (n > MaxValue) { return MaxValue; }
return n;
}
}
}
Многое ещё не дописано. Наткнулся на проблему.
Из редактора свойств этого компонента (или из XAML) можно задать значение Value
, которое выходит за пределы MinValue
<> MaxValue
. Как это проверить? Или это норм для подобных компонентов?