From dea3287619dc0fdd275ba6d320c1d2a4209f1460 Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Wed, 17 Jun 2020 01:18:45 +0800
Subject: [PATCH] resolve some System.Windows.Data Error
---
.../HandyControlDemo_Code.csproj | 7 +++++++
.../Controls/PropertyGridDemoCtl.xaml | 6 ++----
.../Editors/DatePropertyEditor.cs | 13 ++++--------
.../Editors/DateTimePropertyEditor.cs | 13 ++++--------
.../Editors/EnumPropertyEditor.cs | 15 +++++---------
.../Editors/NumberPropertyEditor.cs | 17 ++++++----------
.../Editors/PlainTextPropertyEditor.cs | 14 ++++++-------
.../Editors/PropertyEditorBase.cs | 20 ++++++++++++-------
.../Editors/ReadOnlyTextPropertyEditor.cs | 17 ++++++++++++++++
.../Editors/SwitchPropertyEditor.cs | 17 ++++++----------
.../Editors/TimePropertyEditor.cs | 13 ++++--------
.../Controls/PropertyGrid/PropertyItem.cs | 2 +-
.../Controls/PropertyGrid/PropertyResolver.cs | 8 +++++---
.../HandyControl_Shared.projitems | 1 +
.../Styles/Base/PropertyGridBaseStyle.xaml | 6 ++++--
15 files changed, 85 insertions(+), 84 deletions(-)
create mode 100644 src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/ReadOnlyTextPropertyEditor.cs
diff --git a/src/Shared/HandyControlDemo_Code/HandyControlDemo_Code.csproj b/src/Shared/HandyControlDemo_Code/HandyControlDemo_Code.csproj
index 06779b68..aa36a74c 100644
--- a/src/Shared/HandyControlDemo_Code/HandyControlDemo_Code.csproj
+++ b/src/Shared/HandyControlDemo_Code/HandyControlDemo_Code.csproj
@@ -177,6 +177,9 @@
UserControl\Controls\ProgressButtonDemoCtl.xaml
+
+ UserControl\Controls\PropertyGridDemoCtl.xaml
+
UserControl\Controls\RangeSliderDemoCtl.xaml
@@ -572,6 +575,10 @@
UserControl\Controls\ProgressButtonDemoCtl.xaml.cs
ProgressButtonDemoCtl.xaml
+
+ UserControl\Controls\PropertyGridDemoCtl.xaml.cs
+ PropertyGridDemoCtl.xaml
+
UserControl\Controls\RangeSliderDemoCtl.xaml.cs
RangeSliderDemoCtl.xaml
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PropertyGridDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PropertyGridDemoCtl.xaml
index eff6b153..fe356a58 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PropertyGridDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/PropertyGridDemoCtl.xaml
@@ -2,8 +2,6 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="https://handyorg.github.io/handycontrol"
- xmlns:extension="clr-namespace:HandyControlDemo.Tools.Extension"
- xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
Background="{DynamicResource RegionBrush}">
@@ -11,10 +9,10 @@
-
+
-
+
diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/DatePropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/DatePropertyEditor.cs
index 6ca651c2..50005ce5 100644
--- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/DatePropertyEditor.cs
+++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/DatePropertyEditor.cs
@@ -4,16 +4,11 @@ namespace HandyControl.Controls
{
public class DatePropertyEditor : PropertyEditorBase
{
- public override FrameworkElement CreateElement(PropertyItem propertyItem)
+ public override FrameworkElement CreateElement(PropertyItem propertyItem) => new DateTimePicker
{
- var picker = new DateTimePicker
- {
- IsEnabled = !propertyItem.IsReadOnly
- };
+ IsEnabled = !propertyItem.IsReadOnly
+ };
- picker.SetBinding(System.Windows.Controls.DatePicker.SelectedDateProperty, CreateBinding(propertyItem));
-
- return picker;
- }
+ public override DependencyProperty GetDependencyProperty() => System.Windows.Controls.DatePicker.SelectedDateProperty;
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/DateTimePropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/DateTimePropertyEditor.cs
index 6c40d7ce..34e32e6b 100644
--- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/DateTimePropertyEditor.cs
+++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/DateTimePropertyEditor.cs
@@ -4,16 +4,11 @@ namespace HandyControl.Controls
{
public class DateTimePropertyEditor : PropertyEditorBase
{
- public override FrameworkElement CreateElement(PropertyItem propertyItem)
+ public override FrameworkElement CreateElement(PropertyItem propertyItem) => new DateTimePicker
{
- var picker = new DateTimePicker
- {
- IsEnabled = !propertyItem.IsReadOnly
- };
+ IsEnabled = !propertyItem.IsReadOnly
+ };
- picker.SetBinding(DateTimePicker.SelectedDateTimeProperty, CreateBinding(propertyItem));
-
- return picker;
- }
+ public override DependencyProperty GetDependencyProperty() => DateTimePicker.SelectedDateTimeProperty;
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/EnumPropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/EnumPropertyEditor.cs
index 8d5e908f..bb5ec065 100644
--- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/EnumPropertyEditor.cs
+++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/EnumPropertyEditor.cs
@@ -6,17 +6,12 @@ namespace HandyControl.Controls
{
public class EnumPropertyEditor : PropertyEditorBase
{
- public override FrameworkElement CreateElement(PropertyItem propertyItem)
+ public override FrameworkElement CreateElement(PropertyItem propertyItem) => new System.Windows.Controls.ComboBox
{
- var picker = new System.Windows.Controls.ComboBox
- {
- IsEnabled = !propertyItem.IsReadOnly,
- ItemsSource = Enum.GetValues(propertyItem.PropertyType)
- };
+ IsEnabled = !propertyItem.IsReadOnly,
+ ItemsSource = Enum.GetValues(propertyItem.PropertyType)
+ };
- picker.SetBinding(Selector.SelectedValueProperty, CreateBinding(propertyItem));
-
- return picker;
- }
+ public override DependencyProperty GetDependencyProperty() => Selector.SelectedValueProperty;
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/NumberPropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/NumberPropertyEditor.cs
index 305bcd9f..bde1fd84 100644
--- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/NumberPropertyEditor.cs
+++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/NumberPropertyEditor.cs
@@ -19,18 +19,13 @@ namespace HandyControl.Controls
public double Maximum { get; set; }
- public override FrameworkElement CreateElement(PropertyItem propertyItem)
+ public override FrameworkElement CreateElement(PropertyItem propertyItem) => new NumericUpDown
{
- var numericUpDown = new NumericUpDown
- {
- IsReadOnly = propertyItem.IsReadOnly,
- Minimum = Minimum,
- Maximum = Maximum
- };
+ IsReadOnly = propertyItem.IsReadOnly,
+ Minimum = Minimum,
+ Maximum = Maximum
+ };
- numericUpDown.SetBinding(NumericUpDown.ValueProperty, CreateBinding(propertyItem));
-
- return numericUpDown;
- }
+ public override DependencyProperty GetDependencyProperty() => NumericUpDown.ValueProperty;
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/PlainTextPropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/PlainTextPropertyEditor.cs
index 77663d9b..8011ebe8 100644
--- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/PlainTextPropertyEditor.cs
+++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/PlainTextPropertyEditor.cs
@@ -1,19 +1,17 @@
using System.Windows;
+using System.Windows.Data;
namespace HandyControl.Controls
{
public class PlainTextPropertyEditor : PropertyEditorBase
{
- public override FrameworkElement CreateElement(PropertyItem propertyItem)
+ public override FrameworkElement CreateElement(PropertyItem propertyItem) => new System.Windows.Controls.TextBox
{
- var textbox = new System.Windows.Controls.TextBox
- {
- IsReadOnly = propertyItem.IsReadOnly
- };
+ IsReadOnly = propertyItem.IsReadOnly
+ };
- textbox.SetBinding(System.Windows.Controls.TextBox.TextProperty, CreateBinding(propertyItem));
+ public override DependencyProperty GetDependencyProperty() => System.Windows.Controls.TextBox.TextProperty;
- return textbox;
- }
+ public override BindingMode GetBindingMode(PropertyItem propertyItem) => BindingMode.OneWay;
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/PropertyEditorBase.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/PropertyEditorBase.cs
index 1f1ccb5f..c1a7ab07 100644
--- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/PropertyEditorBase.cs
+++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/PropertyEditorBase.cs
@@ -7,16 +7,22 @@ namespace HandyControl.Controls
{
public abstract FrameworkElement CreateElement(PropertyItem propertyItem);
- public virtual Binding CreateBinding(PropertyItem propertyItem) =>
- new Binding(propertyItem.PropertyName)
- {
- Source = propertyItem.Value,
- Mode = GetBindingMode(propertyItem),
- UpdateSourceTrigger = GetUpdateSourceTrigger(propertyItem)
- };
+ public virtual void CreateBinding(PropertyItem propertyItem, FrameworkElement element) =>
+ BindingOperations.SetBinding(element, GetDependencyProperty(),
+ new Binding($"({propertyItem.PropertyName})")
+ {
+ Source = propertyItem.Value,
+ Mode = GetBindingMode(propertyItem),
+ UpdateSourceTrigger = GetUpdateSourceTrigger(propertyItem),
+ Converter = GetConverter()
+ });
+
+ public abstract DependencyProperty GetDependencyProperty();
public virtual BindingMode GetBindingMode(PropertyItem propertyItem) => propertyItem.IsReadOnly ? BindingMode.OneWay : BindingMode.TwoWay;
public virtual UpdateSourceTrigger GetUpdateSourceTrigger(PropertyItem propertyItem) => UpdateSourceTrigger.PropertyChanged;
+
+ protected virtual IValueConverter GetConverter() => null;
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/ReadOnlyTextPropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/ReadOnlyTextPropertyEditor.cs
new file mode 100644
index 00000000..05656d48
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/ReadOnlyTextPropertyEditor.cs
@@ -0,0 +1,17 @@
+using System.Windows;
+using System.Windows.Data;
+
+namespace HandyControl.Controls
+{
+ public class ReadOnlyTextPropertyEditor : PropertyEditorBase
+ {
+ public override FrameworkElement CreateElement(PropertyItem propertyItem) => new System.Windows.Controls.TextBox
+ {
+ IsReadOnly = true
+ };
+
+ public override DependencyProperty GetDependencyProperty() => System.Windows.Controls.TextBox.TextProperty;
+
+ public override BindingMode GetBindingMode(PropertyItem propertyItem) => BindingMode.OneWay;
+ }
+}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/SwitchPropertyEditor.cs b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/SwitchPropertyEditor.cs
index 706646be..fbfb1c4a 100644
--- a/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/SwitchPropertyEditor.cs
+++ b/src/Shared/HandyControl_Shared/Controls/PropertyGrid/Editors/SwitchPropertyEditor.cs
@@ -6,18 +6,13 @@ namespace HandyControl.Controls
{
public class SwitchPropertyEditor : PropertyEditorBase
{
- public override FrameworkElement CreateElement(PropertyItem propertyItem)
+ public override FrameworkElement CreateElement(PropertyItem propertyItem) => new ToggleButton
{
- var button = new ToggleButton
- {
- Style = ResourceHelper.GetResource