命令与WPF绑定

时间:2012-09-04 22:26:56

标签: c# wpf

我是一个完整的Noob,所以我很难绕过它的工作方式。

基本上我有一个即时使用的主页面,在XAML中我创建了一个菜单


                                                                                

我所拥有的是一个Document(DummyDoc),其中包含我正在尝试将find命令发送到的TextBox。

我已经尝试了这一切并用谷歌搜索它,但我似乎无法让它为我工作,并可以使用一些帮助推动正确的方向

主要表格

 <Window>

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="clr-namespace:DMC_Robot_Editor"
        xmlns:local="clr-namespace:DMC_Robot_Editor.GUI" 

    <Menu>
    <MenuItem Header="_Edit">
     <MenuItem Header="_Cut"/>
    </MenuItem>
    <MenuItem/>
    <Grid>
     <local:DummyDoc x:Name="_Editor"/>
    </Grid>
    </Window>

这是我正在使用的主要形式。然后我有我的第二份文件“DummyDoc”

<ad:DocumentContent x:Name="document" x:Class="DMC_Robot_Editor.Controls.DummyDoc"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ad="clr-namespace:AvalonDock;assembly=AvalonDock"
        xmlns:local="clr-namespace:DMC_Robot_Editor.Controls" 
        xmlns:ed="schemas.microsoft.com/expression/2010/drawing"
        Title="Window1" Height="300" Width="300"
        IsVisibleChanged="Is_VisibleChanged"  PropertyChanged="document_PropertyChanged">
    <Grid>

        <Menu >
            <MenuItem Header="_File">
                <MenuItem Header="was here"/>
            </MenuItem>

        </Menu>
        <local:Editor x:Name="source" IsVisibleChanged="Is_VisibleChanged" TextChanged="TextChanged" UpdateFunctions="raiseupdated" />
        <local:Editor x:Name="data" Visibility="Hidden"  IsVisibleChanged="Is_VisibleChanged" TextChanged="TextChanged"      UpdateFunctions="raiseupdated"/>
    </Grid>
    </ad:DocumentContent>

DummyDoc是一个包含继承编辑器的窗口。

<avalonedit:TextEditor
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:avalonedit="http://icsharpcode.net/sharpdevelop/avalonedit" 
             x:Class="DMC_Robot_Editor.Controls.Editor" 
             x:Name="editor"
             mc:Ignorable="d" 
             d:DesignHeight="300"
    d:DesignWidth="300" 

    TextChanged="Text_Changed"
    IsVisibleChanged="raiseUpdate"
    MouseMove="Mouse_Move"
    MouseHover="Mouse_Hover"

    MouseHoverStopped="Mouse_Hover_Stopped" KeyUp="editor_KeyUp">


    </avalonedit:TextEditor> 

我的终极问题是如何使用WPF绑定从主窗体中执行“剪切”操作启动文本框的cut()方法?

我在其中编写了文本框,因为在后面的代码中,我正在执行以下操作

  partial class DummyDoc:DocumentContent
    {
    public Editor TextBox{get;set;}
     private void Is_VisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if (sender is Editor)
                this.TextBox = sender as Editor;

            if ((VisibilityChanged != null) && (TextBox != null))
                raiseupdated(TextBox, new FunctionEventArgs(this.TextBox.Text));
        }
    }

1 个答案:

答案 0 :(得分:1)

ElementName通过查找使用您指定的字符串标识符的元素来查找元素。

您是否在文本框标记上添加了x:Name="local:TextBox"

我认为你使用“local:TextBox”来划线。

对于初学者...这是用于引用命名空间中的元素类型的语法....它表示“本地命名空间中的类型TextBox”.....它无效(或者更确切地说,在你正在使用的上下文中....你应该只分配一个“标识符”字符串。

...所以

CommandTarget="{Binding ElementName=textboxFind}"

...

<TextBox x:Name="textboxFind"  ..... />

会更合适。


更新(根据问题澄清):

您应该在菜单项中指定一个“命令”,当您选择该菜单项时,该命令将被引发。

然后如果TextEditor具有焦点(...因此是命令目标...)....那么它应该看到Cut命令。

我希望Avalon编辑能够处理众所周知的“ApplicationCommands”,即剪切,复制,粘贴等。

<MenuItem Header="_Cut" Command="ApplicationCommands.Cut">