如何在WPF UI中使<UIElement>可交互或可点击

JXI*_*ITC 5 c# richtextbox wpf-controls flowdocument uielement

这是我使用WPF设计UI的第一天.我查找了Flow Document的 MSDN官方文档,发现我可以在RichTextBox中放置一个UI控件.我确实放了一个按钮,但发现它不能互动 - 我不能点击它,因为它是灰色的.我也尝试了其他控件,它们都显示正常但只是不支持交互.即使是超链接也不起作用.

我通过互联网搜索,有史以来最接近的问题是关于如何使内部超链接可点击:类似的问题:C#WPF文本链接

我做了同样的事情,但没有奏效!所有组件都显示良好,但无法单击.

这是我的XAML代码:

        <RichTextBox Grid.Row="1" Margin="14.007,31.067,22.011,46.305" Name="rtxtRslt" BorderBrush="White" >
        <FlowDocument>
            <Section FontSize="15">
                <Paragraph>
                    <Bold>Click on this:</Bold>
                    <Italic><Hyperlink  NavigateUri="http://stackoverflow.com">http://www.jxitc.info</Hyperlink></Italic>

                </Paragraph>

                <BlockUIContainer>
                    <Button Click="Button_Click">Also Click On This</Button>
                </BlockUIContainer>
            </Section>
        </FlowDocument>
    </RichTextBox>
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些建议:1.是否有可能使其可点击2.如果是,如果我忘记设置RichTextBox控件的任何/什么属性?

The*_*ker 9

首先是你的直接问题:如何制作RichTextBox"活跃" 的内容.将IsDocumentEnabled属性设置为True,RichTextBox如下所示:

   <RichTextBox Grid.Row="1" Margin="14.007,31.067,22.011,46.305" Name="rtxtRslt" BorderBrush="White" 
                    IsDocumentEnabled="True">
        <FlowDocument>
            <Section FontSize="15">
                <Paragraph>
                    <Bold>Click on this:</Bold>
                    <Italic>
                        <Hyperlink  NavigateUri="http://stackoverflow.com">http://www.jxitc.info</Hyperlink>
                    </Italic>

                </Paragraph>

                <BlockUIContainer>
                    <Button Click="Button_Click" >Also Click On This</Button>
                </BlockUIContainer>
            </Section>
        </FlowDocument>
    </RichTextBox>
Run Code Online (Sandbox Code Playgroud)

现在谈到一个未说出口的问题:你必须要在RichTextBox中吗?RichTextBox上有一个特殊属性使嵌入式UI元素处于活动状态,这表明这不是此控件的正常用法.它旨在托管可编辑的FlowDocument内容.因此,RichTextBox的用户通常会创建承载文档使用者可以单击的按钮的文档,如果这有助于区分我不知道.但是,所有这些,默认情况下,您在一个简单的FlowDocumentPageViewer中托管的FlowDocument是活动的.

 <FlowDocumentPageViewer>
        <FlowDocument>
            <Section FontSize="15">
                <Paragraph>
                    <Bold>Click on this:</Bold>
                    <Italic>
                        <Hyperlink NavigateUri="http://stackoverflow.com">http://www.jxitc.info</Hyperlink>
                    </Italic>

                </Paragraph>

                <BlockUIContainer>
                    <Button Click="Button_Click" >Also Click On This</Button>
                </BlockUIContainer>
            </Section>
        </FlowDocument>

    </FlowDocumentPageViewer>
Run Code Online (Sandbox Code Playgroud)

现在对另一个未说出口的问题(难以理解?)你是否必须在FlowDocument内容中?FlowDocument内容类似于,但不是从UIElement派生的.因此,UIElements的许多开箱即用功能都不可用.如果您需要UI中的文档功能,FlowDocuments可以提供一个良好的开端,但它们本身带来了相当大的学习曲线.

问题的标题,如果按字面意思理解,会让我觉得你可能只想要一个WPF UI,它允许你嵌入按钮和超链接并让它们工作(喘气).这当然是默认行为.如果您不需要FlowDocument提供的文档外观和RichTextBox提供的实时文档编辑,您可能会考虑更"传统"的WPF布局.

 <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch"
                Margin="20">
        <TextBlock>
                    <Bold>Click on this:</Bold>
                    <Italic>
                        <Hyperlink NavigateUri="http://stackoverflow.com">http://www.jxitc.info</Hyperlink>
                    </Italic>
        </TextBlock>
        <Button Click="Button_Click" 
                Margin="0,20,0,0">Also Click On This</Button>
    </StackPanel>
Run Code Online (Sandbox Code Playgroud)