2015-11-09 3 views
1

Мне нужен совет относительно того, как добавить функциональность в свой пользовательский элемент управления, все, что есть, является текстовым полем и двумя кнопками, которые увеличивают и уменьшают его значение, которое будет числовым.Добавление функциональности в пользовательский элемент управления

Что я не понимаю, это лучший способ добавить код для этой функции. Должен ли я использовать команды в моем настраиваемом коде управления? Вот код, у меня есть на данный момент:

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!"); 
     } 
    } 
} 

Очевидно, что у меня нет команды работает только однако, решил обратиться за советом, прежде чем продолжить.

ответ

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. 
    } 
} 
1

Это зависит от того, что вы хотите делать, когда пользователь нажимает на кнопки. Если функция предназначена только для увеличения и уменьшения значения в текстовом поле. вы можете зарегистрироваться в командном событии клика позади кода (это ваша логика, и вы не хотите добавлять более динамическую логику).

Если вы хотите, чтобы дать пользователю возможность добавлять свои пользовательские функции, когда он нажать на кнопку вы можете также добавить команду

+0

Спасибо, будет иметь это в виду в будущем, однако первый ответ соответствует моим потребностям. –

Смежные вопросы