WPF:如何在文本流中嵌入按钮(在按钮周围包装文本)?

时间:2009-08-15 22:51:58

标签: wpf button flowdocument wrapping wrappanel

我想对以下问题提出建议:我想在文本流中嵌入Button,但是当我嵌入ButtonLabel(或{{1进入TextBlock,我得到第一个数字:

alt text http://sklad.tomaskafka.com/files/wpf-wrappanel-problem.png

我认为其中一个解决方案可能是WrapPanel,但我觉得这对于像这样简单的控件来说太沉重了(可以在几百个实例中使用)。您对如何实现这一点有其他想法吗?谢谢!

编辑: 一个解决方案可能是以下(我不知道可以将更多内容放入FlowDocument),但我将失去绑定的能力(我需要):

TextBlock

4 个答案:

答案 0 :(得分:1)

要绑定到Run.Text,请查看Fortes的BindableRun课程。易于实现,我在我的项目中使用它。

答案 1 :(得分:1)

我发现正确实现BindableRun非常棘手 - 当绑定内容从null更改为非null时,几乎所有其他可用实现都会导致wpf布局引擎发生异常 - 请参阅this problem, keyword "Collection was modified; enumeration operation may not execute."

来自Microsoft的正确实施是here - 它显示了这是多么棘手。

答案 2 :(得分:0)

解决方案:BindableRun class +以下标记:

<TextBlock>
    <Button x:Name="MyButton" Command="{Binding Path=MyCommand}" Content="+" />
    <common:BindableRun x:Name="Subject" BindableText="{Binding Path=Subject}"/>
</TextBlock>

答案 3 :(得分:0)

有趣的是它适用于UserControl的设计者...... 在这种情况下,使用控件的Property Change将值设置为Run就足够了。我的意思是,如果你有类似的东西:

<TextBlock>          
   <Run Text="{Binding ElementName=thisCtrl, Path=Description}" />
</TextBlock>

然后只需命名运行,并在UserControl DependencyProperty的属性更改处理程序中获取/设置值。