我需要一些关于如何向我的自定义控件添加功能的建议,它只是一个文本框和2个按钮,它们增加和减少它的值,这将是数字。
我不明白是为此功能添加代码的最佳方法。我应该在我的自定义控制代码后面使用命令吗?这是我目前的代码:
XAML - Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Controls">
<Style TargetType="{x:Type local:NumericUpDown}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:NumericUpDown}">
<Grid HorizontalAlignment="Center" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
Padding="5"
Background="Gray"
Command="{Binding Source=NumBox, Path=Increase}">
<Button.Content>
<Path Data="M0,0 L1,0 0.5,1Z"
Width="6"
Height="6"
Fill="White"
Stretch="Fill"/>
</Button.Content>
</Button>
<TextBox x:Name="NumBox"
Grid.Column="1"
Text="0"
Padding="2" />
<Button Grid.Column="2"
Padding="5"
Background="Gray">
<Button.Content>
<Path Data="M0,1 L1,1 0.5,0Z"
Width="6"
Height="6"
Fill="White"
Stretch="Fill" />
</Button.Content>
</Button>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
NumericUpDown.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace Controls
{
public class NumericUpDown : Control
{
static NumericUpDown()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(NumericUpDown),
new FrameworkPropertyMetadata(typeof(NumericUpDown)));
}
}
public static class Command
{
public static readonly RoutedUICommand Increase = new RoutedUICommand("Increase the number", "IncreaseCommand", typeof(Command));
}
public class IncreaseCommand : ICommand
{
public bool CanExecute(object parameter)
{
return false;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
MessageBox.Show("click!");
}
}
}
显然我还没有让命令工作,我决定在继续之前征求意见。
答案 0 :(得分:1)
当用户点击按钮时,它取决于您想要做什么。 如果功能只是增加和减少文本框中的值。你可以在后面的代码上注册命令点击事件(这是你的逻辑,你不想添加更多的动态逻辑)。
如果您还想让用户在点击按钮时添加自定义功能,您还可以 添加命令
答案 1 :(得分:1)
主要是在遇到CustomControls时,你会覆盖这样的OnApplyTemplate()方法。 (记住命名按钮)
public class NumericUpDown : Control
{
static NumericUpDown()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(NumericUpDown),
new FrameworkPropertyMetadata(typeof(NumericUpDown)));
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
Button increaseButton = this.GetTemplateChild("increaseButton") as Button;
if (increaseButton != null)
{
increaseButton.Click += increaseButton_Click;
}
}
private void increaseButton_Click(object sender, RoutedEventArgs e)
{
// Do what you want to do.
}
}