using System; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; namespace Dominion.NET_WPF.Controls { /// /// Interaction logic for ucToggleButton.xaml /// public partial class ucToggleButton : UserControl { public static readonly DependencyProperty IsCheckedProperty = DependencyProperty.Register("IsChecked", typeof(bool?), typeof(ucToggleButton), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure, IsCheckedChanged)); private static void IsCheckedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is ucToggleButton ctrl) ctrl.IsChecked = (bool?)e.NewValue; } public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ucToggleButton), new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure, OnTextChanged)); private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is ucToggleButton ctrl) ctrl.Text = (string)e.NewValue; } public static readonly DependencyProperty PreTextProperty = DependencyProperty.Register("PreText", typeof(string), typeof(ucToggleButton), new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure, OnPreTextChanged)); private static void OnPreTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is ucToggleButton ctrl) ctrl.PreText = (string)e.NewValue; } public static readonly RoutedEvent CheckedEvent = EventManager.RegisterRoutedEvent( "Checked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ucToggleButton)); public event RoutedEventHandler Checked { add { AddHandler(CheckedEvent, value); } remove { RemoveHandler(CheckedEvent, value); } } public ucToggleButton() { InitializeComponent(); } public ICommand Command { get { return bButton.Command; } set { bButton.Command = value; } } public bool? IsChecked { get { return (bool?)GetValue(IsCheckedProperty); //return bName.IsChecked; } set { SetValue(IsCheckedProperty, value); bButton.IsChecked = value; } } public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); if (value.Contains('_')) { tbDisplay.Inlines.Clear(); var tbPreTemp = (TextBlock)Utilities.RenderText(value.Substring(0, value.IndexOf('_')), NET_WPF.RenderSize.Small, false)[0]; while (tbPreTemp.Inlines.Any()) tbDisplay.Inlines.Add(tbPreTemp.Inlines.ElementAt(0)); tbDisplay.Inlines.Add(new Run(value.Substring(value.IndexOf('_') + 1, 1)) { FontWeight = FontWeights.Bold, Foreground = Brushes.Crimson, TextDecorations = TextDecorations.Underline }); var tbPostTemp = (TextBlock)Utilities.RenderText(value.Substring(value.IndexOf('_') + 2), NET_WPF.RenderSize.Small, false)[0]; while (tbPostTemp.Inlines.Any()) tbDisplay.Inlines.Add(tbPostTemp.Inlines.ElementAt(0)); } else { tbDisplay.Text = value; } } } public string PreText { get { return (string)GetValue(PreTextProperty); } set { SetValue(PreTextProperty, value); tbPre.Text = value; } } private void B_Click(object sender, RoutedEventArgs e) { //this.IsChecked = !this.IsChecked; RaiseEvent(new RoutedEventArgs(CheckedEvent)); } private void UserControl_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e) { if ((bool)e.NewValue) { bButton.Background = (VisualBrush)FindResource("ActiveBrush"); } else { bButton.Background = (VisualBrush)FindResource("DiagonalHashBrush"); } } } }