Tôi đang cố chuyển đổi Thuộc tính phụ thuộc C# giới hạn độ dài tối đa của văn bản được nhập vào ComboBox thành F #. Chương trình là một chương trình MVVM sử dụng F # cho mô hình và khung nhìn, và C# cho khung nhìn. mã C# làm việc là thế này:Thuộc tính phụ thuộc trong F # Giá trị mặc định không khớp với
public class myComboBoxProperties
{
public static int GetMaxLength(DependencyObject obj)
{
return (int)obj.GetValue(MaxLengthProperty);
}
public static void SetMaxLength(DependencyObject obj, int value)
{
obj.SetValue(MaxLengthProperty, value);
}
// Using a DependencyProperty as the backing store for MaxLength. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MaxLengthProperty =
DependencyProperty.RegisterAttached("MaxLength",
typeof(int),
typeof(myComboBoxProperties),
new UIPropertyMetadata(OnMaxLengthChanged));
private static void OnMaxLengthChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
if (obj is ComboBox)
{
ComboBox comboBox = (ComboBox)obj;
comboBox.Loaded += (sender, e) =>
{
TextBox textBox = comboBox.Template.FindName("PART_EditableTextBox", comboBox) as TextBox;
if (textBox != null)
{
textBox.SetValue(TextBox.MaxLengthProperty, args.NewValue);
}
};
}
}
}
Chiếc F # mã là thế này:
type myComboBoxProperties() =
static let OnMaxLengthChanged (myobj1 : DependencyObject, args : DependencyPropertyChangedEventArgs) =
let comboBox = myobj1 :?> ComboBox
comboBox.Loaded.Subscribe (fun _ ->
let textBox : TextBox = comboBox.Template.FindName("PART_EditableTextBox", comboBox) :?> TextBox
match textBox with
| null ->()
|_ -> textBox.SetValue(TextBox.MaxLengthProperty, args.NewValue))
static let MaxLengthProperty = DependencyProperty.RegisterAttached("MaxLength", typeof<int>, typeof<myComboBoxProperties>, new UIPropertyMetadata(OnMaxLengthChanged))
static member GetMaxLength (myobj : DependencyObject) = myobj.GetValue(MaxLengthProperty) :?> int
static member SetMaxLength (myobj : DependencyObject, value : int) = myobj.SetValue(MaxLengthProperty, value)
Vấn đề tôi đang gặp là lỗi XAML tôi nhận được là:
Mặc định kiểu giá trị không khớp với loại thuộc tính
MaxLength
Tôi đang làm gì ng?
Bạn có thể cung cấp theo dõi ngăn xếp không? Bạn cũng có thể thử đặt giá trị mặc định một cách rõ ràng vì mục đích thử nghiệm. 'mới UIPropertyMetadata (0, OnMaxLengthChanged));' ví dụ. Dường như lỗi xảy ra tại thời điểm [kiểm tra] (http://referencesource.microsoft.com/#WindowsBase/Base/System/Windows/DependencyProperty.cs,4aed0e0929184ad0) của parameterType và loại [được tạo tự động] (http://referencesource.microsoft.com/#WindowsBase/Base/System/Windows/DependencyProperty.cs,c2c01ce10ae3e445,references) bởi khung giá trị mặc định bình đẳng là stange cho tôi. –
không có dấu vết ngăn xếp, tôi đang cố gắng điều này trong gỡ lỗi. Tôi không thể đưa ra một mặc định bởi vì tôi không biết làm thế nào để thay đổi OnMaxLengthChanged thành một propertycallback. Tôi mới đến F # –