WPF-настройка всплывающей подсказки MaxWidth
Я хотел бы установить свойство ToolTip maxwidth для правильного отображения длинных текстов. Кроме того, мне нужна упаковка текста. Я использовал этот стиль:
<Style TargetType="ToolTip">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding}" MaxWidth="400" TextWrapping='Wrap' />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Этот стиль подсказок подходит для моих целей. Однако он не эффективен для некоторых элементов управления, которые имеют собственный стиль всплывающей подсказки. Например, всплывающая подсказка следующей кнопки может не появиться.
<Button>
<Button.ToolTip>
<StackPanel>
<TextBlock Style="{StaticResource firstText}" Text="aaaaaaaaaaaaa"/>
<TextBlock Style="{StaticResource secondText}" Text="bbbbbbbbbbbbb"/>
<TextBlock Bacground="Red" Text="ccccccccccccc"/>
</StackPanel>
</Button.ToolTip>
</Button>
Я хочу установить свойство maxwidth с переносом текста для всех подсказок. Что я могу сделать для этой проблемы?
4 ответа:
Я избегаю использовать шаблон, потому что многое должно быть реализовано. Так что более элегантный способ сделать это
<Style TargetType="ToolTip"> <Style.Resources> <Style TargetType="ContentPresenter"> <Style.Resources> <Style TargetType="TextBlock"> <Setter Property="TextWrapping" Value="Wrap" /> </Style> </Style.Resources> </Style> </Style.Resources> <Setter Property="MaxWidth" Value="500" /> </Style>
Я понимаю, что это старый вопрос, но, кажется, никто еще не предложил наиболее очевидного и простого решения этой проблемы. Поэтому я решил добавить его здесь:
<Button> <Button.ToolTip> <ToolTip MaxWidth="400"> <TextBlock Text="{Binding Binding}" TextWrapping="Wrap" /> </ToolTip> </Button.ToolTip> </Button>
Для меня полезен следующий стиль подсказки:
<Style TargetType="ToolTip" x:Key="InternalToolTipStyle"> <Setter Property="MaxWidth" Value="{Binding Path=(lib:ToolTipProperties.MaxWidth)}" /> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <ContentPresenter Content="{TemplateBinding Content}" > <ContentPresenter.Resources> <Style TargetType="{x:Type TextBlock}"> <Setter Property="TextWrapping" Value="Wrap" /> </Style> </ContentPresenter.Resources> </ContentPresenter> </DataTemplate> </Setter.Value> </Setter> </Style>
В этом стиле всплывающая подсказка следующей кнопки отображается правильно:
<Button> <Button.ToolTip> <StackPanel> <TextBlock Style="{StaticResource firstText}" Text="aaaaaaaaaaaaa"/> <TextBlock Style="{StaticResource secondText}" Text="bbbbbbbbbbbbb"/> <TextBlock Bacground="Red" Text="ccccccccccccc"/> </StackPanel> </Button.ToolTip>
Используйте это:
<Window.Resources> <Style TargetType="ToolTip" x:Key="TT"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <StackPanel> <TextBlock Text="{Binding}" MaxWidth="400" TextWrapping='Wrap' /> </StackPanel> </DataTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Button> <Button.ToolTip> <ToolTip Style="{StaticResource TT}"> bbbbbbbbbbbbbbbbbbbdddddddddddddddddbbbmmmmmmhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh </ToolTip> </Button.ToolTip> </Button>
Редактировать:
<Button> <Button.ToolTip> <RichTextBox> <FlowDocument> <Paragraph> This is flow content and you can <Bold>edit me!</Bold> </Paragraph> </FlowDocument> </RichTextBox> </Button.ToolTip> </Button>
См.: Обзор RichTextBox