我正在尝试将一些WinForm代码转换为WPF以用于管网绘图应用程序.我一直在这个油漆应用文章的基础上:
http://www.codeproject.com/Articles/22776/WPF-DrawTools
这就是我在WinForms中所拥有的,我正在尝试将其转换为因为我们需要更多可自定义的窗口.我需要做以下事情:
a)单击画布绘制节点b)单击并拖动上述节点c)将鼠标悬停在高亮显示节点上d)用链接连接节点
我有以下代码在画布上绘制一个矩形,但在渲染渲染时画布上不会出现任何内容.我相对肯定它被解雇了,因为在其中放入一个消息框会导致程序崩溃.
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Colors.LimeGreen;
Pen myPen = new Pen(Brushes.Blue, 10);
Rect myRect = new Rect(50, 50, 500, 500);
drawingContext.DrawRectangle(mySolidColorBrush, myPen, myRect);
}
private void myCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
System.Windows.Forms.MessageBox.Show("click event fired");
DrawingVisual vs = new DrawingVisual();
DrawingContext dc = vs.RenderOpen();
OnRender(dc);
}
Run Code Online (Sandbox Code Playgroud)
"触发"消息框就在那里,以确保点击事件触发,并且确实如此.XML:
<TabItem Header="View Results">
<Canvas Background="WhiteSmoke" Name="myCanvas" MouseDown="myCanvas_MouseDown" >
</Canvas>
</TabItem>
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?文章中的人使用用户控件...这就是我遇到问题的原因吗?WPF让我疯狂......我觉得我做的事情完全错了,但我在这个问题上找不到很少的文档.
最近我从我当前的项目中休息了2周,写了一个体面的文件解析器和一个数字错误检查器.我决定用F#写它们,因为踢腿和咯咯笑.神奇的决定.
用VB编写的旧版程序超过1000行; 我在F#中用170管理它.真棒.
我现在回到我当前的项目,并希望合并一个F#lib来进行一些解析,并可能编写/读取XML保存文件.但我似乎无法弄清楚如何在我的生命中从C#WPF应用程序调用F#库.
我正在使用Microsoft Visual 2010 Professional,这是我迄今为止参考这篇文章的尝试:http://www.devjoy.com/2013/02/c-to-f-interop-sharing-a-domain-model / 和几个SO帖子:
然后我将一些测试代码添加到默认的F#文件module1.fs中:
module Module1
let Add a b = a + b
Run Code Online (Sandbox Code Playgroud)并尝试从C#调用它:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
// Call …Run Code Online (Sandbox Code Playgroud)所以这就是问题所在.我有一个窗口分为三个面板.中间包含一个绘图表面,左边包含一个制表符控件.选项卡控件的选项卡每个都包含一个按钮列表,这些按钮必须在右侧面板中打开新菜单.我无法弄清楚如何在代码中执行此操作,因此我使用C#在运行时单独创建每个按钮.似乎必须有更好的方法来实现它.我目前在按钮单击事件中调用以下函数,在运行时在TabControl中命名为"tabctrl"右侧面板中绘制不同的菜单.它需要一个字符串参数来指定要绘制的菜单集,尽管此时我只编写了一个菜单的代码.下面是函数和xml的代码.有没有更好的方法来解决这个问题?
XML:
<TabControl DockPanel.Dock="Right" Background="White" x:Name="tabctrl">
<TabItem Height ="38" Name="Tab1" Header="tab3"/>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
C#:
private void menuOpen(string menuSelected)
{
//Logic statement for what menu is being opened
switch (menuSelected)
{
case "BackGround":
{
//Remove Current Tabs
//Initialize Tab Item, set title, and add tab item to tab control
TabItem BackGround = new TabItem();
BackGround.Header = "BackGround";
tabctrl.Items.Insert(1, BackGround);
BackGround.Height = 38;
//Initialize Stack Panel, set orientation, and add to tab control
StackPanel panel = new StackPanel();
panel.Orientation = Orientation.Vertical;
BackGround.Content = …Run Code Online (Sandbox Code Playgroud) 我正在使用C++中的优化类,并且一直在尝试重新编写Haskell中的实验室以获得踢腿和咯咯笑声.这一过程非常艰难但非常有趣.
我正在尝试编写一个返回3个整数元组列表的函数,如下所示:
[(1,1,1),(1,2,1),(1,3,2)]
这是我一直试图使用的代码:
sortToTuples :: (Num a) => [a] -> Int -> Int -> [(Int,Int,a)]
sortToTuples [] _ _ = []
-- i and j are passed as 1 and 1.
sortToTuples (x:xs) i j
| j > 9 = [(i+1, 1, x)] ++ sortToTuples (xs i+1 1)
| otherwise = [(i, j+1, x)] ++ sortToTuples (xs i, j+1)
Run Code Online (Sandbox Code Playgroud)
该函数用于获取表示数独谜题的平面列表并返回元组列表(i,j,x),其中i是行值,j是列值,x是单元格的值.
无论出于何种原因,haskell对我的类型签名非常不满意:
Prelude> :l quicksort.hs
[1 of 1] Compiling Main ( quicksort.hs, interpreted )
quicksort.hs:23:44:
Couldn't match expected type `[(Int, …Run Code Online (Sandbox Code Playgroud)