小编Ste*_*ion的帖子

WPF渲染事件没有绘制任何东西

我正在尝试将一些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让我疯狂......我觉得我做的事情完全错了,但我在这个问题上找不到很少的文档.

.net c# wpf

4
推荐指数
1
解决办法
3294
查看次数

C#WPF项目无法调用F#库

最近我从我当前的项目中休息了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帖子:

  1. 创建一个WPF项目.
  2. 在解决方案中添加了一个F#库项目.
  3. 通过以下方式向C#项目添加了对F#库的引用:右键单击SolutionExplorer中的项目文件,单击"添加引用",从"项目"选项卡中选择"MyFSharpLib",然后单击"添加".
  4. 然后我将一些测试代码添加到默认的F#文件module1.fs中:

    module Module1
    
    let Add a b = a + b
    
    Run Code Online (Sandbox Code Playgroud)
  5. 并尝试从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)

.net wpf f#

4
推荐指数
1
解决办法
562
查看次数

在运行时动态更新TabControl内容

所以这就是问题所在.我有一个窗口分为三个面板.中间包含一个绘图表面,左边包含一个制表符控件.选项卡控件的选项卡每个都包含一个按钮列表,这些按钮必须在右侧面板中打开新菜单.我无法弄清楚如何在代码中执行此操作,因此我使用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)

.net c# wpf

3
推荐指数
1
解决办法
3899
查看次数

如何在Haskell中返回元组列表

我正在使用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)

haskell list

0
推荐指数
1
解决办法
3667
查看次数

标签 统计

.net ×3

wpf ×3

c# ×2

f# ×1

haskell ×1

list ×1