Xin lỗi vì đã tiếp tục trả lời các câu hỏi 9 năm.
Tôi đã làm theo câu trả lời của @ Micheal và nó hoạt động.
Tôi làm điều đó với tư cách là UserControl, nơi tôi có thể kéo và thả giống như các phần tử Controls. Tôi sử dụng Chủ đề MaterialDesign từ Nuget để lấy biểu tượng Chevron và hiệu ứng gợn nút.
NumericUpDown đang chạy từ Micheal với sửa đổi sẽ như sau: -
Mã kiểm soát người dùng: -
TemplateNumericUpDown.xaml
<UserControl x:Class="UserControlTemplate.TemplateNumericUpDown"
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:UserControlTemplate"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d" MinHeight="48">
<Grid Background="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="60"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="txtNum" x:FieldModifier="private" Text="{Binding Path=NumValue}" TextChanged="TxtNum_TextChanged" FontSize="36" BorderThickness="0" VerticalAlignment="Center" Padding="5,0"/>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="30*"/>
<RowDefinition Height="30*"/>
</Grid.RowDefinitions>
<Grid Background="#FF673AB7">
<Viewbox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="Auto" Width="Auto">
<materialDesign:PackIcon Kind="ChevronUp" Foreground="White" Height="32.941" Width="32"/>
</Viewbox>
<Button x:Name="cmdUp" x:FieldModifier="private" Click="CmdUp_Click" Height="Auto" BorderBrush="{x:Null}" Background="{x:Null}"/>
</Grid>
<Grid Grid.Row="1" Background="#FF673AB7">
<Viewbox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="Auto" Width="Auto">
<materialDesign:PackIcon Kind="ChevronDown" Foreground="White" Height="32.942" Width="32"/>
</Viewbox>
<Button x:Name="cmdDown" x:FieldModifier="private" Click="CmdDown_Click" Height="Auto" BorderBrush="{x:Null}" Background="{x:Null}"/>
</Grid>
</Grid>
</Grid>
</UserControl>
TemplateNumericUpDown.cs
using System.Windows;
using System.Windows.Controls;
namespace UserControlTemplate
{
/// <summary>
/// Interaction logic for TemplateNumericUpDown.xaml
/// </summary>
public partial class TemplateNumericUpDown : UserControl
{
private int _numValue = 0;
public TemplateNumericUpDown()
{
InitializeComponent();
txtNum.Text = _numValue.ToString();
}
public int NumValue
{
get { return _numValue; }
set
{
if (value >= 0)
{
_numValue = value;
txtNum.Text = value.ToString();
}
}
}
private void CmdUp_Click(object sender, RoutedEventArgs e)
{
NumValue++;
}
private void CmdDown_Click(object sender, RoutedEventArgs e)
{
NumValue--;
}
private void TxtNum_TextChanged(object sender, TextChangedEventArgs e)
{
if (txtNum == null)
{
return;
}
if (!int.TryParse(txtNum.Text, out _numValue))
txtNum.Text = _numValue.ToString();
}
}
}
Trên MyPageDesign.xaml, kéo và thả điều khiển người dùng đã tạo sẽ có <UserControlTemplate:TemplateNumericUpDown HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100"/>
Để lấy giá trị từ mẫu, tôi sử dụng
string Value1 = JournalNumStart.NumValue;
string Value2 = JournalNumEnd.NumValue;
Tôi chưa có kỹ năng tốt để ràng buộc Chiều cao của điều khiển dựa trên phần tử FontSize, vì vậy tôi đặt kích thước phông chữ từ trang của mình theo cách thủ công trong điều khiển người dùng.
** Lưu ý: - Tôi đã thay đổi tên "Lưu trữ" thành Lưu trữ trên chương trình của mình =)