繁体   English   中英

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

[英]UWP - Change Tooltip height/width

我利用工具提示为网格中的每一行显示更多详细信息。 详细信息在工具提示中显示为网格列,但是我无法更改工具提示的宽度以全部显示。

我尝试更改工具提示的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);

样式文件

<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>

根据工具提示样式和模板 ,默认情况下, ToolTipMaxWidth为320。 由于ToolTip样式不会打开MaxWidth属性进行设置,因此,如果直接为ToolTip设置MaxWidth属性,则它可能不会MaxWidth ,因此只能直接设置诸如ForegroundBackgroundPadding等属性。 因此,您可能需要通过如下更改ToolTip的默认样式来更新ContentPresenterMaxWidth

 <Rectangle
     Grid.Row="0"
     Grid.ColumnSpan="3"
     Fill="Azure"
     Opacity="0.3">
     <ToolTipService.ToolTip>
         <ToolTip>
             <ToolTip.Style>
                 <Style TargetType="ToolTip">
                     <Setter Property="Template">
                         <Setter.Value>
                             <ControlTemplate TargetType="ToolTip">
                                 <ContentPresenter
                                     x:Name="LayoutRoot"
                                     MaxWidth="2000"
                                     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>
             </ToolTip.Style>
             <Grid>
                 <Grid.RowDefinitions>
                   ...
                 </Grid.RowDefinitions>
                 <Grid.ColumnDefinitions>
                   ...
                 </Grid.ColumnDefinitions>
                 <TextBlock
                     Grid.Row="0"
                     Grid.Column="0"
                     Text="testtriptext on column 0testtriptext on column 0testtriptext on column 0testtriptext on column 0" />
                 <TextBlock
                     Grid.Row="1"
                     Grid.Column="1"
                     Text="testtriptext on column 1" />
                 <TextBlock
                     Grid.Row="2"
                     Grid.Column="2"
                     Text="testtriptext on column 2" />
             </Grid>
         </ToolTip>
     </ToolTipService.ToolTip>
 </Rectangle>

解决方案就在那里: 必须将样式应用于Tooltip对象

我直接将用户控件分配为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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM