- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试仅使用 F#(版本 12.0.30815.0 + Framework 4.5)创建“UserControl”“By-Code”,因为我更喜欢这种“方式”(C# 和 F# 之间没有混合)。
注意:我必须在输入表单中显示单个类的多个属性,因此此 UserControl 需要实现绑定(bind)功能以将“输出”连接到类的属性。
我尝试修改窗口内的数值(即 1200 或 400)或使用键盘上的 TAB 键在控件之间移动焦点,但似乎已锁定。
无法实现数值的更新。我只能删除一个或多个单个数字,没有任何更新。
也许我在 UserControls 中实现的事件“dataChangedEvent”中存在概念错误(即“ucData”控件的“Data”属性 - 请参阅代码)。它类似于:“INotifyPropertyChanged”。
注意:也许在事件实现中的这个错误也存在于 UserControl 的“Description”和“UnitOfMeasure”属性中。
有人可以帮我找出下面报告的代码行中我的错误在哪里吗?
非常感谢。
人工神经网络
type ucData() as this =
inherit Windows.Controls.UserControl()
static let OnDataPropertyChanged (sender:DependencyObject) (e:DependencyPropertyChangedEventArgs) =
let control = unbox<ucData>(sender)
let newValue = unbox<double>(e.NewValue)
let oldValue = unbox<double>(e.OldValue)
System.Console.WriteLine
(sprintf
">>> OnPropertyChanged 'ucData':'Data': Control Name: %s; Value: %f --> %f <<<"
control.Name oldValue newValue )
let argsEvent = new RoutedPropertyChangedEventArgs<double>(oldValue, newValue)
argsEvent.RoutedEvent <- ucData.DataChangedEvent // I get an ERROR here!!!!
control.RaiseEvent(argsEvent)
static let OnCoerceDataProperty (sender:DependencyObject) (data:obj) =
let control = unbox<ucData>(sender)
let value = unbox<double>(data)
System.Console.WriteLine
(sprintf
">>> OnCoerceValue 'ucData':'Data': Control Name: %s; Value: : %f <<<"
control.Name value )
box(value)
static let OnValidateDataProperty (data:obj) =
System.Console.WriteLine
(sprintf
">>> OnValidateValue 'ucData':'Data': Data %s <<<"
(data.ToString()) )
data.GetType() = typeof<double>
static let dpData =
DependencyProperty.Register("Data",typeof<double>, typeof<ucData>,
new FrameworkPropertyMetadata( 0.0,
FrameworkPropertyMetadataOptions.Inherits,
new PropertyChangedCallback(OnDataPropertyChanged),
new CoerceValueCallback(OnCoerceDataProperty) ),
new ValidateValueCallback(OnValidateDataProperty) )
static let reDataChangedEvent =
EventManager.RegisterRoutedEvent
("DataChanged", RoutingStrategy.Bubble,
typeof<RoutedPropertyChangedEventHandler<double>>, typeof<ucData>)
let dataChangedEvent =
let e = new Event<RoutedPropertyChangedEventHandler<double>,RoutedPropertyChangedEventArgs<double>>()
// Equialent to:
// public event RoutedPropertyChangedEventHandler<double> DataChanged
// {
// add { AddHandler(DataChangedEvent, value); }
// remove { RemoveHandler(DataChangedEvent, value); }
// }
// where DataChangedEvent is so defined:
// public static readonly RoutedEvent DataChangedEvent;
e
let grid =
let c = new Grid()
let colData = new ColumnDefinition()
colData.MinWidth <- 70.
c.ColumnDefinitions.Add( colData )
c
let data=
let c = new TextBox()
c.Margin<- new Thickness(3.0)
c.SetValue(Grid.ColumnProperty,1)
c
do
grid.Children.Add(data) |> ignore
this.AddChild(grid) |> ignore
let bData = new Binding()
bData.Path <- new PropertyPath("Data")
bData.StringFormat <- "N"
bData.ConverterCulture <- System.Globalization.CultureInfo.InvariantCulture
bData.Mode <- BindingMode.TwoWay
bData.RelativeSource <- new RelativeSource(RelativeSourceMode.FindAncestor,typeof<ucData>,1)
data.SetBinding(TextBox.TextProperty, bData) |> ignore
static member DataProperty = dpData
[<Description("Specify the Numerical Data"); Category("UserData")>]
member x.Data
with get() =
let res = x.GetValue(ucData.DataProperty)
(res :?> double)
and set (v:double) =
x.SetValue(ucData.DataProperty, v )
[<CLIEvent>]
static member DataChangedEvent with get() = reDataChangedEvent // I get an ERROR here!!!
[<CLIEvent>]
member x.DataChanged = dataChangedEvent.Publish
type TestWindow() as this =
inherit Window()
let c1 = new ucData()
let c2 = new ucData()
do
c1.Name <- "Data1"
c2.Name <- "Data2"
this.Width <- 300.
this.Height <- 300.
let sp = new StackPanel()
c1.Data <- 1200.
c2.Data <- 400.
sp.Children.Add(c1) |> ignore
sp.Children.Add(c2) |> ignore
c1.DataChanged.Add( fun args ->
MessageBox.Show("The button labeled \"" + c1.Data.ToString()) |>ignore )
c2.DataChanged.Add( fun args ->
MessageBox.Show("The button labeled \"" + c1.Data.ToString()) |>ignore )
this.Content <- sp
let w = new TestWindow()
w.Show()
最佳答案
根据 this回答,你需要在 FSI 中启动一个 WPF 事件循环。由于年纪大了,我不得不稍微调整一下。这是您的脚本的完整工作版本:
#I @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5"
#r @"WindowsBase.dll"
#r @"PresentationCore.dll"
#r @"PresentationFramework.dll"
#r @"System.Xaml.dll"
#r @"UIAutomationProvider.dll"
#r @"UIAutomationTypes.dll"
module WPFEventLoop =
open System
open System.Windows
open System.Windows.Threading
open Microsoft.FSharp.Compiler.Interactive
open Microsoft.FSharp.Compiler.Interactive.Settings
type RunDelegate<'b> = delegate of unit -> 'b
let Create() =
let app =
try
// Ensure the current application exists. This may fail, if it already does.
let app = new Application() in
// Create a dummy window to act as the main window for the application.
// Because we're in FSI we never want to clean this up.
new Window() |> ignore;
app
with :? InvalidOperationException -> Application.Current
let disp = app.Dispatcher
let restart = ref false
{ new IEventLoop with
member x.Run() =
app.Run() |> ignore
!restart
member x.Invoke(f) =
try
disp.Invoke(DispatcherPriority.Send,new RunDelegate<_>(fun () -> box(f ()))) |> unbox
with e -> eprintf "\n\n ERROR: %O\n" e; reraise()
member x.ScheduleRestart() = ()
//restart := true;
//app.Shutdown()
}
let Install() = fsi.EventLoop <- Create()
WPFEventLoop.Install()
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //
open System
open System.Windows
open System.Windows.Data
open System.Windows.Controls
open System.Windows.Input
open System.Windows.Media
open System.ComponentModel
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //
type ucData() as this =
inherit Windows.Controls.UserControl()
// ---------------------------------------------------------------------------------------------------------------- //
static let dpDescription =
DependencyProperty.Register("Description", typeof<string>, typeof<ucData>)
static let dpData =
DependencyProperty.Register("Data", typeof<double>, typeof<ucData>)
static let dpUnitOfMeasure =
DependencyProperty.Register("UnitOfMeasure", typeof<string>, typeof<ucData>)
// ---------------------------------------------------------------------------------------------------------------- //
let descriptionChangedEvent = new Event<RoutedEventHandler, RoutedEventArgs>()
let dataChangedEvent = new Event<RoutedEventHandler, RoutedEventArgs>()
let unitOfMeasureChangedEvent = new Event<RoutedEventHandler, RoutedEventArgs>()
// ---------------------------------------------------------------------------------------------------------------- //
let grid =
let c = new Grid()
let colDesc = new ColumnDefinition()
colDesc.MinWidth <- 100.
colDesc.Width <- System.Windows.GridLength(100.,GridUnitType.Star)
c.ColumnDefinitions.Add( colDesc )
let colData = new ColumnDefinition()
colData.MinWidth <- 70.
colDesc.Width <- System.Windows.GridLength(70.,GridUnitType.Star)
c.ColumnDefinitions.Add( colData )
let colUnit = new ColumnDefinition()
colUnit.MinWidth <- 70.
colUnit.Width <- System.Windows.GridLength(70.,GridUnitType.Star)
c.ColumnDefinitions.Add( colUnit )
c
// ---------------------------------------------------------------------------------------------------------------- //
let desc =
let c = new Label()
c.Margin<- new Thickness(3.0)
c.SetValue(Grid.ColumnProperty,0)
c
// ---------------------------------------------------------------------------------------------------------------- //
let data=
let c = new TextBox()
c.Margin<- new Thickness(3.0)
c.SetValue(Grid.ColumnProperty,1)
c
// ---------------------------------------------------------------------------------------------------------------- //
let unit =
let c = new Label()
c.Margin<- new Thickness(3.0)
c.SetValue(Grid.ColumnProperty,2)
c
// ---------------------------------------------------------------------------------------------------------------- //
let condassign a b c =
match a with
| true -> b
| false -> c
// ---------------------------------------------------------------------------------------------------------------- //
do
grid.Children.Add(desc) |> ignore
grid.Children.Add(data) |> ignore
grid.Children.Add(unit) |> ignore
//this.Content <- grid |> ignore
this.AddChild(grid) |> ignore
// ---------------------------------------------------------------------------------------------------------------- //
this.Data <- 0.00
this.Description <- "<Description>"
this.UnitOfMeasure <- "<UM>"
// ---------------------------------------------------------------------------------------------------------------- //
this.DataContext <- this
// ---------------------------------------------------------------------------------------------------------------- //
let bDesc = new Binding()
bDesc.Path <- new PropertyPath("Description")
bDesc.Mode <- BindingMode.OneWay
bDesc.RelativeSource <- new RelativeSource(RelativeSourceMode.FindAncestor,typeof<ucData>,1)
let bData = new Binding()
bData.Path <- new PropertyPath("Data")
bData.Mode <- BindingMode.TwoWay
bData.RelativeSource <- new RelativeSource(RelativeSourceMode.FindAncestor,typeof<ucData>,1)
let bUnit = new Binding()
bUnit.Path <- new PropertyPath("UnitOfMeasure")
bUnit.Mode <- BindingMode.OneWay
//bUnit.RelativeSource <- new RelativeSource(RelativeSourceMode.FindAncestor,typeof<ucData>,1)
bUnit.Source <- this
// ---------------------------------------------------------------------------------------------------------------- //
desc.SetBinding(Label.ContentProperty, bDesc) |> ignore
data.SetBinding(TextBox.TextProperty, bData) |> ignore
unit.SetBinding(Label.ContentProperty, bUnit) |> ignore
// ---------------------------------------------------------------------------------------------------------------- //
static member DescriptionProperty = dpDescription
[<Description("Description of the Numerical Data"); Category("UserData")>]
member x.Description
with get() =
let res = x.GetValue(ucData.DescriptionProperty)
(res :?> string)
and set (v:string) =
x.SetValue(ucData.DescriptionProperty, (condassign (v=null) " " v) )
// ---------------------------------------------------------------------------------------------------------------- //
[<CLIEvent>]
member x.DescriptionChanged = descriptionChangedEvent.Publish
static member DescriptionChangedEvent =
EventManager.RegisterRoutedEvent
("DescriptionChanged", RoutingStrategy.Bubble,
typeof<RoutedEventHandler>, typeof<ucData>)
member x.OnDescriptionChangedEvent() =
let argsEvent = new RoutedEventArgs()
argsEvent.RoutedEvent <- ucData.DescriptionChangedEvent
argsEvent.Source <- x
descriptionChangedEvent.Trigger(this, argsEvent)
// ---------------------------------------------------------------------------------------------------------------- //
static member DataProperty =dpData
[<Description("Specify the Numerical Data"); Category("UserData")>]
member x.Data
with get() =
let res = x.GetValue(ucData.DataProperty)
(res :?> double)
and set (v:double) =
x.SetValue(ucData.DataProperty, v )
// ---------------------------------------------------------------------------------------------------------------- //
[<CLIEvent>]
member x.DataChanged = dataChangedEvent.Publish
static member DataChangedEvent =
EventManager.RegisterRoutedEvent
("DataChanged", RoutingStrategy.Bubble,
typeof<RoutedEventHandler>, typeof<ucData>)
member x.OnDataChangedEvent() =
let argsEvent = new RoutedEventArgs()
argsEvent.RoutedEvent <- ucData.DataChangedEvent
argsEvent.Source <- x
dataChangedEvent.Trigger(this, argsEvent)
// ---------------------------------------------------------------------------------------------------------------- //
static member UnitOfMeasureProperty = dpUnitOfMeasure
[<Description("Specify the 'Unit of Measure'"); Category("UserData")>]
member x.UnitOfMeasure
with get() =
let res = x.GetValue(ucData.UnitOfMeasureProperty)
(res :?> string)
and set (v:string) =
x.SetValue(ucData.UnitOfMeasureProperty, (condassign (v=null) " " v) )
// ---------------------------------------------------------------------------------------------------------------- //
[<CLIEvent>]
member x.UnitOfMeasureChanged = unitOfMeasureChangedEvent.Publish
static member UnitOfMeasureChangedEvent=
EventManager.RegisterRoutedEvent
("UnitOfMeasureChanged", RoutingStrategy.Bubble,
typeof<RoutedEventHandler>, typeof<ucData>)
member x.OnUnitOfMeasureChangedEvent() =
let argsEvent = new RoutedEventArgs()
argsEvent.RoutedEvent <- ucData.UnitOfMeasureChangedEvent
argsEvent.Source <- x
unitOfMeasureChangedEvent.Trigger(this, argsEvent)
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //
type TestWindow() as this =
inherit Window()
let c1 = new ucData()
let c2 = new ucData()
do
this.Width <- 300.
this.Height <- 300.
let sp = new StackPanel()
c1.Description <- "Pippo"
c1.Data <- 1200.
c1.UnitOfMeasure <- "mm"
c1.BorderThickness <- new Thickness(2.0)
c2.Description <- "Pippo2"
c2.Data <- 400.
c2.UnitOfMeasure <- "MPa"
c2.BorderThickness <- new Thickness(2.0)
sp.Children.Add(c1) |> ignore
sp.Children.Add(c2) |> ignore
this.Content <- sp
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //
let w = new TestWindow()
w.Show()
关于wpf - F# 以编程方式创建 UserControl : Missing Update (keyboard input seem locked),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28648356/
命令 npm update 有什么区别和包裹npm-check-updates ?使用后者是否完全安全? 执行后好像是npm update并非所有软件包都已更新,因此似乎不完整。许多其他 popula
我有使用 ExpressJS 和 ORM Sequelize 的 API。我正在尝试使用 Sequelize 中的 update() 方法进行更新。默认情况下,it 方法将返回更新的行数。但我希望结果
关于如何更新 rubygems 有点困惑。过程不断变化(或者至少我从互联网上得到了相互矛盾的信息)。 $ gem outdated rubygems-update (1.8.10 < 1.8.11
我正在使用 webpack-dev-server处于开发模式( watch )。每次服务器重新加载时,一些 json 和 js 文件都会挤满我的构建目录,如下所示:'hash'.hot-update.
Mamp Pro 的当前版本是 5.04 (15996)。可用更新窗口显示“Mamp 5.0.0 > 5.1。更新失败,并显示一条消息:错误:无法验证更新。请确保您使用的是安全网络,然后重试。” 更新
我想在浏览量增加时更新时间戳“lastpageview_at”。我想我已经接近了,但我总是遇到语法错误,有人知道为什么或有其他解决方案吗? 我的触发器: CREATE TRIGGER Update_l
我正在执行 SELECT ... FOR UPDATE 以锁定一条记录,然后进行一些计算,然后进行实际的 UPDATE。我正在处理 InnoDB 数据库。 但是计算可能会以我不想执行 UPDATE 的
我需要在表更新时进行一些更新和插入以强制执行正确的数据。将 UPDATE 语句放入触发器中会导致某种“循环”吗? 谢谢! 最佳答案 更新触发器中的目标表将使触发器再次触发。 您可以使用 TRIGGER
这是我的布局 当我点击链接更新时,该链接应该打开和关闭renderComment bool
我有一个包含两件事的 Angular 范围: 一个包含 10k 行的巨型表格,需要一秒钟才能渲染 一些小的额外信息位于固定的覆盖标题栏中 根据您向下滚动页面/表格的距离,我必须更新标题中的小信息位之一
标题几乎已经说明了一切。 IF NEW.variance <> 0 THEN (kill update) END IF 这可能吗? 最佳答案 查看手册 (http://dev.mysql.com/do
我有几个表,我想强制执行版本控制,并且有一个生效日期和生效日期。每当应用程序或用户向该表写入更新时,我希望它重定向到两个全新的命令:更新目标记录,以便 EFFECTIVE_TO 日期填充当前日期和时间
我正在使用 Shopware,一件奇怪的事情让我抓狂 :( 所以我将首先解释问题是什么。 除了普通商品外,还有多种款式的商品,例如不同尺码的衬衫。这是 XS、S、M、L 和/或不同颜色的同一商品……但
寻求帮助制作 mysql 触发器。我当前的代码无法按预期工作。我想做的是,如果表A中的字段A被修改,则将字段A复制到表A中的字段B。 当前代码如下所示: BEGIN IF new.set_id=301
以下查询(来自此处Postgres SQL SELECT and UPDATE behaving differently) update fromemailaddress set call =
我想使用 D3 使用以下数据创建一个列表: var dataSet = [ { label: 'a', value: 10}, { label: 'b', value: 20},
哪个更好,先进行选择,然后进行更新。或者更确切地说,像这样合而为一: UPDATE items set status = 'NEW' where itemid in (1,2,3,
对于 eloquent model events,updating 和 updated 之间有什么区别? ? 我的猜测是 updating 在模型更新之前触发,而 updated 在模型更新之后触发。
我有一个对象数组(我们称之为arr)。在我的组件输入之一的 (change) 方法中,我修改了这些对象的属性之一,但在 View (*ngFor) 中没有任何变化。我读到 Angular2 变化检测不
我正在尝试使用 d3.js 构建水平日历时间线。主要目标是突出显示用户的假期和假期。 http://jsbin.com/ceperavu/2/edit?css,js,output 我首先从“开始”日期
我是一名优秀的程序员,十分优秀!