Я пробую очень простой пример в F # и WPF. Я хочу переопределить OnRender на Canvas. Я сделал это:WPF и пользовательский рендеринг
namespace App
open ...
type public MyRender =
class
inherit FrameworkElement
new() = { inherit FrameworkElement() }
override this.OnRender(dc:DrawingContext) =
dc.DrawRectangle(Brushes.DarkGray, null, new Rect(0.0, 0.0, 200.0, 80.0))
let text = new FormattedText("Hello World!",
CultureInfo.CurrentUICulture,
FlowDirection.LeftToRight,
new Typeface("Tahoma"), 20.0, Brushes.White)
dc.DrawText(text, new Point(30.0, 25.0))
dc.DrawEllipse(new SolidColorBrush(Colors.Black),
new Pen(Brushes.Blue, 10.0),
new Point(256.0, 256.0), 80.0, 30.0)
base.OnRender(dc)
end
module Main =
type MainWindow = XAML<"MainWindow.xaml">
let loadWindow() =
let window = MainWindow()
window.Root
[<;STAThread>;]
(new Application()).Run(loadWindow()) |> ignore
И в файле XAML:
<Window x:Class="System.Windows.Window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:wf="clr-namespace:App"
Title="" Height="450" Width="500">
<Canvas Height="400" Width="400">
<wf:MyRender Width="300" Height="300"/>
</Canvas>
</Window>
Название приложения App.fs. XAML продолжает сообщать мне, что MyRender не найден в пространстве имен приложений. Я не могу понять, почему и что я могу сделать, чтобы исправить это. Может ли кто-нибудь просветить меня?
Заранее спасибо.
[Изменить] Я внедрил код, используя предложение Tomas Petricek. Я также переместил MyRender для наследования из FrameworkElement и поместил его в Canvas. Теперь в окне XAML в VS2013 показан элемент MyRender. Тем не менее, я все еще получаю исключение во время выполнения из-за невозможности создания неклассифицированного типа '{clr-namespace: App} MyRender'.
Проблема теперь в том, что мне нужно указать пространство имен ws: current на текущую сборку. Любая идея о том, как это сделать?
Спасибо за ваш ответ. Да, возможно, это будет именование. Я изменил код в соответствии с вашим предложением, но я все еще получаю: Исключение: Брошено: «Невозможно создать неизвестный тип» {clr-namespace: App} MyRender '. " (System.Xaml.XamlObjectWriterException) во время выполнения. Если это не именование, может ли это быть провайдер типа F # XAML? Надеюсь нет. – FabPop