当前位置:  开发笔记 > Android > 正文

如何重新设置嵌套在自定义控件中的控件?

如何解决《如何重新设置嵌套在自定义控件中的控件?》经验,为你挑选了1个好方法。

假设你正在开发一个自定义的控制在WPF在内部包含其他一些基本的控制.为了简单起见,假设它包含2个按钮.

现在你想在你的应用程序中使用这个自定义控件,但是你想稍微重新设置它.

情况1

如果在自定义控件定义中,两个按钮具有相同的样式(默认为wpf)并且您想要重新设置两个按钮,那么应该很容易:


   
      
   

案例2

如果在自定义控件定义中,两个按钮具有相同的样式(默认为wpf),但是您想要用两种不同的样式重新设置它们,那么解决它的最佳方法是什么?

案例3

如果在自定义控件定义中,两个按钮具有相同的样式,引用自定义控件中定义的样式,并且您想重新设置它们,那么解决它的最佳方法是什么?

提前感谢您的帮助



1> Enrico Campi..:

您可以在自定义控件中定义2个不同的样式属性,并将它们绑定到各个按钮的Style属性,从而允许客户端相互独立地设置两个控件的样式.

XAML文件:


  
    

代码隐藏文件:

using System;
using System.Windows;
using System.Windows.Controls;

namespace MyNamespace
{
  [StyleTypedProperty(
  Property = "FirstButtonStyle",
  StyleTargetType = typeof(Button))]
  [StyleTypedProperty(
  Property = "SecondButtonStyle",
  StyleTargetType = typeof(Button))]
  public partial class MyControl : UserControl
  {
    public static readonly DependencyProperty FirstButtonStyleProperty =
      DependencyProperty.Register(
        "FirstButtonStyle",
        typeof(Style),
        typeof(MyControl)
      );

    public Style FirstButtonStyle
    {          
      get { return (Style)GetValue(FirstButtonStyleProperty); }
      set { SetValue(FirstButtonStyleProperty, value); }
    }


    public static readonly DependencyProperty SecondButtonStyleProperty =
      DependencyProperty.Register(
        "SecondButtonStyle",
        typeof(Style),
        typeof(MyControl)
      );

    public Style SecondButtonStyle
    {          
      get { return (Style)GetValue(SecondButtonStyleProperty); }
      set { SetValue(SecondButtonStyleProperty, value); }
    }
  }
}

将这两个属性实现为依赖属性是一个好主意,因为这将使它们符合标准WPF控件中的其他Style属性.

现在,您可以像在任何WPF控件中一样设置按钮的样式:


  
    
    
  
  
    
  

或者,您可以通过在自定义控件中公开绑定到两个内部控件的Style属性的单个属性来使 2个按钮共享相同的Style.

UPDATE

您不必将FirstButtonStyleSecondButtonStyle属性定义为依赖项属性.重要的是,按钮的Style属性的内部绑定会在其值发生变化时更新.您可以通过在用户控件中实现INotifyPropertyChanged接口来完成此操作,并在属性设置器中引发OnPropertyChanged事件.

您还可以为用户控件的构造函数中的2个属性指定"默认样式".这是一个例子:

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;

namespace MyNamespace
{
  [StyleTypedProperty(
  Property = "FirstButtonStyle",
  StyleTargetType = typeof(Button))]
  [StyleTypedProperty(
  Property = "SecondButtonStyle",
  StyleTargetType = typeof(Button))]
  public partial class MyControl : UserControl, INotifyPropertyChanged
  {
    private Style firstButtonStyle;
    private Style secondButtonStyle;

    public MyControl()
    {
      Style defaultStyle = new Style();
      // assign property setters to customize the style

      this.FirstButtonStyle = defaultStyle;
      this.SecondButtonStyle = defaultStyle; 
    }

    public Style FirstButtonStyle
    {          
      get { return firstButtonStyle; }
      set
      {
         firstButtonStyle = value;
         OnPropertyChanged("FirstButtonStyle");
      }
    }

    public Style SecondButtonStyle
    {          
      get { return secondButtonStyle; }
      set
      {
         secondButtonStyle = value;
         OnPropertyChanged("SecondButtonStyle");
      }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
      if (PropertyChanged != null)
      {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
      }
    }
  }
}

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有