2017-02-15 30 views
0

我利用工具提示显示网格中每一行的更多详细信息。 细节显示为工具提示内的网格列,但我无法更改工具提示宽度以将它们全部显示出来。UWP - 更改工具提示高度/宽度

我试着改变工具提示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> 
+1

请提供您的XAML以更好地了解您如何尝试这样做。请阅读如何用[mcve]提问。 – AVK

+0

能否请你解释为什么这个帖子已经被降低后添加新的细节? – Tiresia

回答

1

的解决方案是正确的有:样式必须应用到一个工具提示对象

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

定义一个具有所需样式的工具提示对象,并将我的用户控件指定为其内容。

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); 
1

的根据ToolTip styles and templatesToolTip的3210默认为320。由于ToolTip风格不打开MaxWidth属性进行设置,如果您直接为ToolTip设置MaxWidth属性,可能不会产生任何影响,只有像Foreground,Background,Padding等属性可以直接设置。所以,你可能需要通过更改默认样式为ToolTip如下更新MaxWidthContentPresenter

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

上面编辑:我试图通过编程实现。 – Tiresia

+0

这是正确的提示,谢谢@Sunteen Wu!只需以编程方式获得相同的结果。 – Tiresia