wpf 使用按钮单击调用Avalon编辑器中的搜索

p3rjfoxz  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(174)

我在窗口对话框(WPF)中使用AvalonEditor。窗口对话框宿主TextEditor控件。我在Windows上有明确的查找按钮。点击按钮,搜索应该在文本编辑器内工作。你能建议如何绑定按钮查找调用文本编辑器搜索。
目前,我已经编辑了TextEditor构造函数来安装SearchPanel。当在TextEditor中按Ctrl + F时,将显示默认搜索对话框。我希望同样的事情工作按钮点击,但使用MVVM的方法。
请建议。
WPF XAML代码

<Window>
<StackPanel Grid.Row="0" Grid.Column="1"  Orientation="Horizontal" HorizontalAlignment="Left">
            <Button Name="FindButton" Content="Find" Margin="2" Style="{DynamicResource ButtonFooter_Style}" >
                <Button.CommandBindings>
                    <CommandBinding Command="ApplicationCommands.Find" CanExecute="CommandBinding_CanExecute">
                    </CommandBinding>
                </Button.CommandBindings>
            </Button>            
        <avalonEdit:TextEditor Grid.Row="2" Grid.Column="1" Name="textEditor"
                FontFamily="Consolas"
                FontSize="10pt"                                
                SyntaxHighlighting="XML" ShowLineNumbers="True" >
        </avalonEdit:TextEditor>
</Window>

已编辑TextEditor.cs类构造函数

public TextEditor() : this(new TextArea())
    {
        Search.SearchPanel.Install(this.TextArea);
    }

按Ctrl + F时启用查找功能
现在,我希望查找按钮调用搜索功能,而无需按Ctrl + F。

  • 谢谢
pzfprimi

pzfprimi1#

在代码后面…
创建一个成员:

private readonly SearchPanel searchPanel;

在你的构造函数中,或者在任何适合你需要的块中(只需要发生一次):

searchPanel = SearchPanel.Install(textEditor);

然后在事件处理代码中:

searchPanel.SearchPattern = "eg. your selected text";
        searchPanel.Open();
        searchPanel.Reactivate();;
anhgbhbe

anhgbhbe2#

按照https://stackoverflow.com/a/12399756/5041912中的想法,您还可以添加一个布尔DependencyProperty,该属性可以在ViewModel中设置,并通过单击按钮进行切换
在视图模型中:

private bool _openSearchPanel;
public bool OpenSearchPanel { get => _openSearchPanel; set => this.RaiseAndSetIfChanged(ref _openSearchPanel, value); }

private void OpenSearchPanelCmd()
{
    OpenSearchPanel = !OpenSearchPanel;
}

在MvvmTextEditor中:

public bool OpenSearchPanel
{
     set
     {
         this.searchPanel.Open();
         this.searchPanel.Reactivate();
     }
}

在视图中:

<local:MvvmTextEditor OpenSearchPanel="{Binding DataContext.OpenSearchPanel, ElementName=xxxx}"

Open AvalonEdit SearchPanel with a button click

相关问题