UWP - 更改工具提示高度/宽度

时间:2017-02-15 16:09:09

标签: c# uwp tooltip

我正在利用工具提示来显示网格中每一行的更多详细信息。 细节在工具提示中显示为网格列,但我无法更改工具提示宽度以显示所有内容。

我尝试更改工具提示Width,MinWidth,MaxWidth属性,甚至内部网格宽度;但工具提示始终保持相同的大小。

.CS

Rectangle rect = new Rectangle();
rect.Opacity = 0.3;
rect.SetValue(Grid.RowProperty, r);
rect.SetValue(Grid.ColumnSpanProperty, 7);
rect.Fill = new SolidColorBrush(Colors.Azure);
rect.Margin = new Thickness(2);

MyTooltip mt = new MyTooltip(par);
mt.Style = Application.Current.Resources["LargeToolTipStyle"] as Style;

rect.SetValue(ToolTipService.ToolTipProperty, mt);

STYLES.XAML

<Style x:Key="LargeToolTipStyle" TargetType="local:MyTooltip">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ToolTip">
                <ContentPresenter
                                 x:Name="LayoutRoot"
                                 MaxWidth="800"
                                 Padding="{TemplateBinding Padding}"
                                 Background="{TemplateBinding Background}"
                                 BorderBrush="{TemplateBinding BorderBrush}"
                                 BorderThickness="{TemplateBinding BorderThickness}"
                                 Content="{TemplateBinding Content}"
                                 ContentTemplate="{TemplateBinding ContentTemplate}"
                                 ContentTransitions="{TemplateBinding ContentTransitions}"
                                 TextWrapping="Wrap">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="OpenStates">
                            <VisualState x:Name="Closed">
                                <Storyboard>
                                    <FadeOutThemeAnimation TargetName="LayoutRoot" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Opened">
                                <Storyboard>
                                    <FadeInThemeAnimation TargetName="LayoutRoot" />
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                </ContentPresenter>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

MYTOOLTIP.XAML

<UserControl
    x:Class="Client.MyTooltip"
    ...
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid Name="TooltipGrid" HorizontalAlignment="Stretch">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBlock Name="TooltipHeaderTBL" Text="LEFT HEADER" 
               Grid.Column="0">
        </TextBlock>
         <TextBlock Name="TooltipHeaderTBR" Text="RIGHT HEADER" 
               Grid.Column="1">
        </TextBlock>
        <TextBlock Name="TooltipContentTBL" Text="Content sample (L)" 
               Grid.Row="1"
               Grid.Column="0"></TextBlock>
        <TextBlock Name="TooltipContentTBR" Text="Content sample (R)"
               Grid.Row="1"
               Grid.Column="1"></TextBlock>
    </Grid>
</UserControl>

2 个答案:

答案 0 :(得分:1)

根据ToolTip styles and templatesMaxWidth的{​​{1}}默认为320。由于ToolTip样式没有打开ToolTip属性进行设置,如果您直接为MaxWidth设置MaxWidth属性,则可能不会产生任何影响,因此只有ToolTipForegroundBackground等可以直接设置。因此,您可能需要更改Padding的{​​{1}},方法是更改​​MaxWidth的默认样式,如下所示:

ContentPresenter

答案 1 :(得分:1)

解决方案就在那里:必须将样式应用于工具提示对象

我直接将用户控件指定为ToolTipService.ToolTipProperty,然后尝试编辑用户控件样式。

使用所需的样式定义ToolTip对象,并将我的用户控件指定为其内容,就可以了。

Rectangle rect = new Rectangle();
rect.Opacity = 0.3;
rect.SetValue(Grid.RowProperty, r);
rect.SetValue(Grid.ColumnSpanProperty, 7);
rect.Fill = new SolidColorBrush(Colors.Azure);
rect.Margin = new Thickness(2);

MyTooltip mt = new MyTooltip(par);

ToolTip t = new ToolTip();
t.Content = mt;
t.Style = Application.Current.Resources["LargeToolTipStyle"] as Style;

rect.SetValue(ToolTipService.ToolTipProperty, t);