Skip to content

Commit 2869db4

Browse files
committed
#71 Text change does not refresh issue
Text change does not refresh issue
1 parent 3e95876 commit 2869db4

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

src/WPFDevelopers.Samples.Shared/ExampleViews/BadgeExample.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@
3636
Margin="10,0"
3737
wd:Badge.FontSize="12"
3838
wd:Badge.IsShow="{Binding ElementName=MyBadgeToggleButton, Path=IsChecked}"
39-
wd:Badge.Text="3"
39+
wd:Badge.Text="{Binding Text,RelativeSource={RelativeSource AncestorType=UserControl}}"
4040
Content="Success"
41+
Click="myButton_Click"
4142
Style="{DynamicResource WD.SuccessDefaultButton}" />
4243
<Button
4344
Width="100"
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Windows.Controls;
1+
using System.Windows;
2+
using System.Windows.Controls;
23

34
namespace WPFDevelopers.Samples.ExampleViews
45
{
@@ -7,9 +8,23 @@ namespace WPFDevelopers.Samples.ExampleViews
78
/// </summary>
89
public partial class BadgeExample : UserControl
910
{
11+
public string Text
12+
{
13+
get { return (string)GetValue(TextProperty); }
14+
set { SetValue(TextProperty, value); }
15+
}
16+
17+
public static readonly DependencyProperty TextProperty =
18+
DependencyProperty.Register("Text", typeof(string), typeof(BadgeExample), new PropertyMetadata("3"));
19+
1020
public BadgeExample()
1121
{
1222
InitializeComponent();
1323
}
24+
25+
private void myButton_Click(object sender, System.Windows.RoutedEventArgs e)
26+
{
27+
Text = "10";
28+
}
1429
}
1530
}

src/WPFDevelopers.Shared/Controls/Badge/Badge.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
using System;
2+
using System.ComponentModel;
3+
using System.Reflection;
4+
using System.Runtime.InteropServices;
25
using System.Windows;
36
using System.Windows.Documents;
47
using System.Windows.Media;
8+
using System.Xml.Linq;
59
using WPFDevelopers.Helpers;
610

711
namespace WPFDevelopers.Controls
812
{
913
public class Badge : Adorner
1014
{
1115
public static readonly DependencyProperty TextProperty =
12-
DependencyProperty.Register("Text", typeof(string), typeof(Badge), new PropertyMetadata(string.Empty));
16+
DependencyProperty.RegisterAttached("Text", typeof(string), typeof(Badge), new PropertyMetadata(string.Empty, OnTextChanged));
1317

1418
public static readonly DependencyProperty FontSizeProperty =
1519
DependencyProperty.Register("FontSize", typeof(double), typeof(Badge), new PropertyMetadata(10.0d));
1620

17-
1821
public static readonly DependencyProperty IsShowProperty =
1922
DependencyProperty.RegisterAttached("IsShow", typeof(bool), typeof(Badge),
2023
new PropertyMetadata(false, OnIsBadgeChanged));
@@ -118,6 +121,21 @@ public static void SetHorizontalOffset(UIElement element, string horizontalOffse
118121
element.SetValue(HorizontalOffsetProperty, horizontalOffset);
119122
}
120123

124+
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
125+
{
126+
if (d is FrameworkElement parent)
127+
{
128+
var isShow = GetIsShow(parent);
129+
if (!isShow) return;
130+
var newEventArgs = new DependencyPropertyChangedEventArgs(
131+
e.Property,
132+
false,
133+
isShow);
134+
OnIsBadgeChanged(d, newEventArgs);
135+
}
136+
137+
}
138+
121139
private static void OnIsBadgeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
122140
{
123141
if (e.NewValue is bool isShow && d is FrameworkElement parent)
@@ -140,7 +158,6 @@ private static void OnIsBadgeChanged(DependencyObject d, DependencyPropertyChang
140158
}
141159
private static void Parent_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
142160
{
143-
144161
if (e.NewValue is bool isVisible && sender is FrameworkElement parent)
145162
{
146163
var isShow = GetIsShow(parent);

0 commit comments

Comments
 (0)