ToggleButtonMenuControl.xaml.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. namespace Muchinfo.WPF.Controls.Button
  4. {
  5. /// <summary>
  6. /// ToggleButtonMenuControl.xaml 的交互逻辑
  7. /// </summary>
  8. public partial class ToggleButtonMenuControl : UserControl
  9. {
  10. #region 依赖属性
  11. public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string),
  12. typeof(ToggleButtonMenuControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
  13. new PropertyChangedCallback(TextChanged)));
  14. public static readonly DependencyProperty ToggleButtonTemplateProperty = DependencyProperty.Register("ToggleButtonTemplate",
  15. typeof(ControlTemplate), typeof(ToggleButtonMenuControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
  16. new PropertyChangedCallback(ToggleButtonTemplateChanged)));
  17. public ControlTemplate ToggleButtonTemplate
  18. {
  19. get { return (ControlTemplate)GetValue(ToggleButtonTemplateProperty); }
  20. set { SetValue(ToggleButtonTemplateProperty, value); }
  21. }
  22. public string Text
  23. {
  24. get { return (string)GetValue(TextProperty); }
  25. set { SetValue(TextProperty, value); }
  26. }
  27. private static void ToggleButtonTemplateChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
  28. {
  29. if (e.NewValue != null)
  30. {
  31. var control = (o as ToggleButtonMenuControl);
  32. if (control == null) return;
  33. //使用外部
  34. control.ChildToggleButton.Template = e.NewValue as ControlTemplate;
  35. }
  36. }
  37. private static void TextChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
  38. {
  39. if (e.NewValue != null && !string.IsNullOrEmpty(e.NewValue.ToString()))
  40. {
  41. var control = (o as ToggleButtonMenuControl);
  42. if (control == null) return;
  43. control.ChildToggleButton.Content = e.NewValue;
  44. }
  45. }
  46. public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool?),
  47. typeof(ToggleButtonMenuControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
  48. new PropertyChangedCallback(IsCheckedChanged)));
  49. public bool? IsChecked
  50. {
  51. get { return (bool?)GetValue(IsCheckedProperty); }
  52. set { SetValue(IsCheckedProperty, value); }
  53. }
  54. private static void IsCheckedChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
  55. {
  56. if (e.NewValue != null && !string.IsNullOrEmpty(e.NewValue.ToString()))
  57. {
  58. var control = (o as ToggleButtonMenuControl);
  59. if (control == null) return;
  60. control.ChildToggleButton.IsChecked = (bool?)e.NewValue;
  61. }
  62. }
  63. #endregion
  64. public ToggleButtonMenuControl()
  65. {
  66. InitializeComponent();
  67. }
  68. private void RadioBnt_OnClick(object sender, RoutedEventArgs e)
  69. {
  70. this.ChildToggleButton.IsChecked = false;
  71. if (this.ContextMenu != null)
  72. {
  73. if (!this.ContextMenu.IsOpen) this.ContextMenu.IsOpen = true; ;
  74. }
  75. }
  76. }
  77. }